需要明确hibernate.hbm2ddl.auto = update

时间:2014-05-08 05:28:09

标签: mysql hibernate

我正在使用hibernate和java来创建和管理关系数据库MySQL。现在我陷入了早先创建表并且这些表也包含数据的情况。 我目前的要求是我需要增加列的大小。之前我已经为java.lang.String类型给出了50的大小,但现在我需要增加并使它成为80.在hibernate中有什么方法可以做到这一点吗? 我无法使用 hibernate.hbm2ddl.auto = create ,因为它会截断表中的整个数据并直接从数据库级别更新它在我的情况下是不可行的。在这种情况下,我不认为 hibernate.hbm2ddl.auto = update 上的需要清晰度会对我有所帮助。请建议我是否可以通过休眠方式进行此操作。提前谢谢..

2 个答案:

答案 0 :(得分:3)

设置hiberate.hbm2ddl.auto=validate并使用MySQLWorkbench或任何类似工具自行手动更改实际数据库中列的大小。另请参阅here以获取有关不同值的作用的说明。这是因为您确实希望保持数据库中的数据。我很确定使用update仍会删除整个表以替换列长度,所以我不会使用它。使用validate将使Hibernate根据您的注释验证数据库模式,以确保正确设置数据库。永远不会使用除validate之外的任何其他内容来生成代码。

编辑: 要真正回答这个问题,没有Hibernate不能删除和重新创建表,这将导致其中的任何数据丢失。

答案 1 :(得分:0)

最糟糕的是,您可以使用Work unit,如下所示:

sessionObject.doWork(new Work() {
    public void execute(Connection c) throws SQLException {
       c.setAutoCommit(false);
       ResultSet tblContent = c.createStatement("select * from tbl", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE);
       // assume col1 is a final variable indicating the column name you want to trim
       while (tblContent.isLast() == false) {
           tblContent.updateString(col1, tblContent.getString(col1).substring(0, 49)); // or whatever
           tblContent.updateRow();
           tblContent.next();
       }
       c.commit();
    }
}

希望它有所帮助...