Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用hibernate更新数据库架构 更新_Java_Hibernate_Hbm2ddl - Fatal编程技术网

Java 使用hibernate更新数据库架构 更新

Java 使用hibernate更新数据库架构 更新,java,hibernate,hbm2ddl,Java,Hibernate,Hbm2ddl,我可以创建我的数据库模式,它会自动添加属性、约束、键等。。。 但是如何更新数据库模式呢? 若我从实体中删除了一些属性,hibernate不会删除它,或者若我更改了一些约束,hibernate不会触及已经创建的约束 那么,有没有办法让hibernate真正更新数据库模式 谢谢。没有。hbm2ddl并不意味着要对模式迁移进行完整的管理。最好只将其用于模式的附加更改,而手动编辑(生成的脚本)用于其他任何操作。Hibernate提供了一个名为SchemaUpdate的类,该类能够将一组Hibernate

我可以创建我的数据库模式,它会自动添加属性、约束、键等。。。 但是如何更新数据库模式呢? 若我从实体中删除了一些属性,hibernate不会删除它,或者若我更改了一些约束,hibernate不会触及已经创建的约束

那么,有没有办法让hibernate真正更新数据库模式


谢谢。

没有。hbm2ddl并不意味着要对模式迁移进行完整的管理。最好只将其用于模式的附加更改,而手动编辑(生成的脚本)用于其他任何操作。

Hibernate提供了一个名为SchemaUpdate的类,该类能够将一组Hibernate映射与数据库模式同步


,但请让社区知道它是否好:)

我们目前使用的方法是以数据库不可知的方式自动更改数据库。可以直接从hibernate注释中提取liquibase命令,但我不认为存在这样的工具,因此您可能需要自己来做。

我们为自己创建了一个工具,它创建必要的数据库列和表拖放,并将这些拖放添加到为数据库更新生成的SQL中。但是我们必须在SchemaUpdate生成中添加一些额外的内容以使其正常工作:

  • 我们必须为非空属性添加检查。这包括对数据发出UPDATE语句,在可能的情况下删除空值,从而得到下一个默认值点
  • 我们必须添加对列的默认值的检查。默认值由列及其数据类型的可空性推断。原语总是初始化为零或false,而不是将null枚举初始化为其第一个枚举值,但对于其他对象,必须手动修改脚本
  • 我们甚至添加了对调整varchar列大小的支持,因为在某些情况下,数据库列长度和
    @column(length)
    不同

但总而言之,一个完整的工具不能以这种方式创建,因为如果一个列在代码中被重命名会怎么样?如果类型以无法自动转换的方式更改(bool至今?),该怎么办。如果您无权访问重构历史记录,则无法始终传播更改。

一些可能有助于管理架构更改的项目:

  • (SOW上标注了1049个问题)
  • (663个问题贴在工作说明书上)
  • (SOW上标注了400个问题)

另一个你可以找到的有用资源是Flyway网站上的(这里提到了其他相关项目)。

你说liquibase是数据库不可知论是什么意思?我试图在一个RDBMS上运行一个在另一个RDBMS上生成的liquibase变更集(即数据库程序),但它不起作用。Fletch-我已经使用它很多年了,它与数据库无关,但如果你硬编码到一个特定的数据库,它就不会起作用。尝试使用xml节点,如。。。然后它会为你翻译。这个链接似乎被破坏了,至少它没有为我显示任何内容,只有文章的标题。
<property name="hibernate.hbm2ddl.auto">update</property>