我真的想知道更多关于更新,导出和值,可以给hibernate.hbm2ddl.auto 我需要知道什么时候使用更新,什么时候不?另一种选择是什么?
以下是在DB中可能发生的变化:
新表 旧表中的新列 列删除 事件解释列的数据类型发生变化 列的类型更改了其属性 表了 事件解释列值发生变化
在每种情况下,最佳解决方案是什么?
我真的想知道更多关于更新,导出和值,可以给hibernate.hbm2ddl.auto 我需要知道什么时候使用更新,什么时候不?另一种选择是什么?
以下是在DB中可能发生的变化:
新表 旧表中的新列 列删除 事件解释列的数据类型发生变化 列的类型更改了其属性 表了 事件解释列值发生变化
在每种情况下,最佳解决方案是什么?
当前回答
给任何人搜索默认值…
它是在spring-boot 2.0.5版本和JpaProperties 1.1.0版本的源代码中编写的:
/**
* DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto"
* property. Defaults to "create-drop" when using an embedded database and no
* schema manager was detected. Otherwise, defaults to "none".
*/
private String ddlAuto;
其他回答
配置属性称为hibernate.hbm2ddl.auto
在我们的开发环境中,我们设置hibernate.hbm2ddl。Auto =create-drop to drop并在每次部署时创建一个干净的数据库,以便我们的数据库处于已知状态。
理论上,您可以设置hibernate.hbm2ddl。auto=update用于更新数据库,对模型进行更改,但我不相信在生产数据库上这样做。早期版本的文档说,这至少是实验性的;我不知道目前的情况。
因此,对于我们的生产数据库,不要设置hibernate.hbm2ddl。自动-默认是不进行数据库更改。相反,我们手动创建一个SQL DDL更新脚本,将一个版本的更改应用到下一个版本。
首先,hbm2ddl配置属性的可能值如下:
none - No action is performed. The schema will not be generated. create-only - The database schema will be generated. drop - The database schema will be dropped. create - The database schema will be dropped and created afterward. create-drop - The database schema will be dropped and created afterward. Upon closing the SessionFactory, the database schema will be dropped. validate - The database schema will be validated using the entity mappings. update - The database schema will be updated by comparing the existing database schema with the entity mappings.
hibernate.hbm2ddl。Auto ="update"很方便,但如果您计划添加函数或执行一些自定义脚本,则不太灵活。
所以,最灵活的方法是使用Flyway。
但是,即使使用Flyway,仍然可以使用hbm2ddl生成初始迁移脚本。
hibernate.hbm2ddl。auto在创建sessionFactory时自动验证DDL并将其导出到模式。
默认情况下,不会自动对DB进行任何创建或修改。如果用户设置了以下值之一,那么它将自动进行DDL模式更改。
创建—正在创建模式 <输入键= " hibernate.hbm2ddl。汽车“价值= "创建" > 更新——更新现有的模式 <输入键= " hibernate.hbm2ddl。汽车“价值= "更新" > 验证—验证现有的模式 <输入键= " hibernate.hbm2ddl。汽车“价值= "验证" > 创建-删除—在会话开始和结束时自动创建和删除模式 <输入键= " hibernate.hbm2ddl。汽车“价值= " create-drop " >
如果你不想在你的应用程序中使用字符串,并正在寻找预定义的常量,请查看Hibernate JAR中包含的org.hibernate.cfg.AvailableSettings类,在那里你可以找到一个用于所有可能设置的常量。以你为例:
/**
* Auto export/update schema using hbm2ddl tool. Valid values are <tt>update</tt>,
* <tt>create</tt>, <tt>create-drop</tt> and <tt>validate</tt>.
*/
String HBM2DDL_AUTO = "hibernate.hbm2ddl.auto";
给任何人搜索默认值…
它是在spring-boot 2.0.5版本和JpaProperties 1.1.0版本的源代码中编写的:
/**
* DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto"
* property. Defaults to "create-drop" when using an embedded database and no
* schema manager was detected. Otherwise, defaults to "none".
*/
private String ddlAuto;