我想第一次在Hibernate中创建数据库模式。如果模式有任何修改,比如添加新表或删除某些列,我希望更新现有的模式并保留以前的数据。
根据这个问题所给出的选项,似乎我要么可以创建破坏先前数据的模式,要么可以更新模式。
是否有一个值可以同时完成这两个操作?
我想第一次在Hibernate中创建数据库模式。如果模式有任何修改,比如添加新表或删除某些列,我希望更新现有的模式并保留以前的数据。
根据这个问题所给出的选项,似乎我要么可以创建破坏先前数据的模式,要么可以更新模式。
是否有一个值可以同时完成这两个操作?
实际上,我刚刚检查了<property name="hibernate.hbm2ddl.auto" value="update" />
,它即使第一次创建表格,如果表格/模式存在,则会进行更新。
Update
属性适用于启动或添加新模型时。您想保留先前保存的实体实例。这是默认的模式创建样式。
它尝试更新模式(如果需要)。支持以下更新:
请看我一些观察结果
/*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>
我不建议根据实体变更来更新数据库模式。尝试使用Flyway或Liquibase。
您可以在stackoverflow上找到类似的问题,例如:Hibernate/JPA数据库模式生成最佳实践