如何在休眠中第一次创建数据库模式并在模式修改的情况下进一步更新它?
Posted
技术标签:
【中文标题】如何在休眠中第一次创建数据库模式并在模式修改的情况下进一步更新它?【英文标题】:How to create database schema in hibernate first time and further update it in case of schema modification? 【发布时间】:2012-02-07 13:24:57 【问题描述】:我想第一次在休眠中创建数据库模式。此外,如果架构中有任何修改,例如添加新表或删除某些列,我想更新现有架构,保持以前的数据不变。
根据this question 给出的选项,看起来我可以创建架构来破坏以前的数据,或者我可以更新架构。
有什么价值可以两者兼得吗?
【问题讨论】:
您要自动执行此任务吗?换句话说,您真的会多次创建数据库吗? 不,我不想创建 db 一次。正如我之前所说,它应该是第一次创建,然后如果有任何修改,它应该是 db 模式。 您是否尝试过保持“更新”,“更新”在这两种情况下都不起作用吗? 【参考方案1】:实际上我刚刚检查了<property name="hibernate.hbm2ddl.auto" value="update" />
甚至是第一次创建表,然后如果表/模式存在,它会更新。
Update
属性在启动或添加新模型时适用。您想要保留之前保存的实体实例。这是默认的架构创建风格。
如果需要,它会尝试更新架构。支持以下更新:
看看我的一些观察
添加字段 - 将新列添加到表中。 重命名字段 - 将新列添加到表中,而原始列保留但不再使用。 注意:旧列的数据不会迁移到新列。 删除字段 - 列保留但未使用。 更改字段类型 - 列的类型不会更改,这可能会导致类型不匹配异常。 创建实体 - 创建一个新表。 重命名实体 - 创建一个新表,同时保留原始表。 将实体移动到另一个文件夹 - 创建一个新表,同时保留原始表。 删除实体 - 表格保留。【讨论】:
非常有帮助 - 没有在其他地方找到此信息。谢谢!【参考方案2】:你可以使用'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 会创建新的数据库。
【讨论】:
有更现代的方式来完成架构初始化:docs.spring.io/spring-boot/docs/current/reference/html/…【参考方案3】:我不建议根据实体更改来更新数据库架构。尝试使用Flyway 或Liquibase。 您可以在 *** 上找到类似的问题,例如。 Hibernate/JPA DB Schema Generation Best Practices
【讨论】:
嗨 kris.Thanks for reply.Actually 我现在只想知道,如果模式不存在,是否可以在休眠中创建数据库模式,否则如果模式已经存在并且存在则更新模式对 hbm 文件进行了一些修改,对属性 hibernate.hbm2ddl.auto 进行了一些修改以上是关于如何在休眠中第一次创建数据库模式并在模式修改的情况下进一步更新它?的主要内容,如果未能解决你的问题,请参考以下文章