hibernate.hbm2ddl.auto="update"
很奇怪。任何数据库实体..如果不在数据库中(数据库中的表和表中的列)将通过保持UPDATE来创建。但是,如果我想更改任何现有数据类型或任何列的大小,那么它不起作用。通过这种方式,我创建了一个UPDATE创建的东西,但没有更新。但是当我试图添加一个约束(它不是null)时,它又没有做任何事情。没有添加约束。
请建议我如何处理无法使用CREATE的情况,但我仍然希望更改任何列的数据类型或任何列的大小。 我已经阅读了很多文档和答案,但没有一个给出理由。
我正在使用带有MySQL-5.6.12的hibernate 4.0.0 ..
提前致谢.....
答案 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"
当表中已存在数据时,您无法添加新的非空约束。
如果您尝试使用可为空的约束,可以检查会发生什么。