我想第一次在hibernate中创建数据库模式。此外,如果架构中有任何修改,例如添加新表或删除某些列,我想更新现有架构,保持以前的数据不变。
根据this question给出的选项,看起来我可以创建销毁先前数据的架构,或者我可以更新架构。
是否有任何价值可以同时做到?
答案 0 :(得分:27)
实际上我刚刚检查<property name="hibernate.hbm2ddl.auto" value="update" />
是第一次创建表,然后如果存在表/模式,它会更新。
Update
属性适用。您希望保留先前保存的实体实例。这是默认的架构创建样式。
如果需要,它会尝试更新架构。支持以下更新:
查看我的一些观察
答案 1 :(得分:4)
您可以使用'import.sql'。
在资源中添加import.sql文件,如下所示:
/*create database at first time*/
CREATE SCHEMA your-database-name;
并在'hibernate.cfg.xml'中添加一行,如下所示:
<hibernate-configuration>
<session-factory>
...
...
<property name="hbm2ddl.import_files">import.sql</property>
...
...
</session-factory>
</hibernate-configuration>
因此,如果数据库不存在,hibernate会创建新的数据库。
答案 2 :(得分:1)
我不建议根据实体更改更新数据库模式。尝试使用Flyway或Liquibase。 您可以在stackoverflow上找到类似的问题,例如。 Hibernate/JPA DB Schema Generation Best Practices