hibernate中hibernate.hbm2ddl.auto =“update”的确切行为是什么?

时间:2014-05-06 12:01:01

标签: hibernate

hibernate.hbm2ddl.auto="update"很奇怪。任何数据库实体..如果不在数据库中(数据库中的表和表中的列)将通过保持UPDATE来创建。但是,如果我想更改任何现有数据类型或任何列的大小,那么它不起作用。通过这种方式,我创建了一个UPDATE创建的东西,但没有更新。但是当我试图添加一个约束(它不是null)时,它又没有做任何事情。没有添加约束。

请建议我如何处理无法使用CREATE的情况,但我仍然希望更改任何列的数据类型或任何列的大小。 我已经阅读了很多文档和答案,但没有一个给出理由。

我正在使用带有MySQL-5.6.12的hibernate 4.0.0 ..

提前致谢.....

2 个答案:

答案 0 :(得分:2)

hibernate.hbm2ddl.auto="update"

只有在创建SessionFactory对象时才会更新实体中所做的更改(如果有效)。 "create"将在创建SessionFactory对象时创建新的数据库表。

create - doing creating schema
update - updating existing schema
validate - validate existing schema
create-drop - create and drop the schema automatically when session is starts and ends.

update对现有数据的行为不正确,因此请勿在生产中使用更新。因为有些时候说更改数据类型可能无效。您可以参考this question

我的建议:只需从您的数据库中备份您的数据。然后根据需要进行更改,例如增加大小,更改数据类型(它应与旧数据类型兼容)。然后最后将数据导入新生成的数据库结构。

答案 1 :(得分:1)

使用hibernate.hbm2ddl.auto="update"

当表中已存在数据时,您无法添加新的非空约束。

如果您尝试使用可为空的约束,可以检查会发生什么。