【问题标题】:Drop/Insert constraint using Liquibase and Hibernate使用 Liquibase 和 Hibernate 的删除/插入约束
【发布时间】:2018-04-13 03:36:28
【问题描述】:

我是 Liquibase + Hibernate 的新手。

我有一个名为 Users 的表,其中包含 {Id、FirstName、LastName、YearOfBirth、.....} 列。 我使用 Hibernate 注释为这对 {Id, LastName} 设置了一个唯一约束。

现在,我决定要更新约束,包括 FirstName 列,这意味着我希望我的唯一约束是 {Id, FirstName, LastName}。 这可以通过 Liquibase,在我现有的数据库上,通过变更集来完成吗?

我考虑过通过变更集删除旧约束,并使用另一个约束创建新约束。问题是,我不知道旧约束的名称,也不知道它后面的索引的名称。而且由于 Liquibase/Hibernate 会为约束/索引自动生成名称,我不想通过查询搜索来获取特定的约束名称。

我正在寻找更通用的解决方案,这样我就可以解决同样的未来问题。

有什么建议吗?

我正在使用 Java 8、Hibernate 5.2.10、Liquibase 3.5.2

【问题讨论】:

    标签: java hibernate constraints liquibase migrate


    【解决方案1】:

    未来的一些注意事项:

    您可以通过这种方式设置唯一的约束名称:

    @Table(uniqueConstraints = 
        @UniqueConstraint(columnNames = { "unique_field" }, name = "UK_users_unique_field")
    

    我认为,如果您想使用 Liquibase,您不应该通过 Hibernate 创建模式。您需要通过 Liquibase 使用您的 SQL 脚本创建一个模式。你当然可以通过 Hibernate 生成一个 SQL 脚本。

    使用

    hibernate.hbm2ddl.auto=validate 
    

    仅验证数据库架构,不创建任何内容。

    【讨论】:

    • 感谢您的回答。我尝试通过 Liquibase 生成更改日志来重新创建模式数据库。我注意到约束和索引有一个随机自动生成的名称,所以我重命名它们以满足我的需要。问题是,对于某些索引/约束,虽然我添加了变更集,但 Hibernate 还在某些情况下创建了相同的索引,但再次使用随机名称。对此有何意见?
    • 我发现了问题所在。我在 hibernate.cfg.xml 文件中设置:更新 所以一些索引和约束由 Liquibase 由 Hibernate 创建。我删除了 hbm2ddl 属性,现在一切正常! @v.ladynev 与 validate 值,数据库架构将通过哪些标准进行验证?
    • @Dionysis Hibernate 将在初始化期间将实体与数据库模式进行比较。因此,在应用程序启动之前,您将遇到所有架构不一致。
    【解决方案2】:

    不幸的是,索引名称在删除时是必填字段。这是来自liquibase 的相关文档。

    在这种情况下,您需要使用 SQL 命令删除索引。根据底层数据库是什么,您需要根据索引的列名以编程方式确定分配给要删除的表的索引名称。例如,如果您使用的是 Oracle 数据库,您可以运行解释过的 SQL here 并将这些命令捕获到一个 sql 文件中。 Liquibase 支持将 SQL 文件作为变更集包含在内,因此您需要按照 here 的说明在变更集中使用 sqlFile 标记,以便运行您之前捕获的 sql 语句。删除索引后,您可以再次使用 liquibase changeSet 根据需要添加新的索引/约束。

    【讨论】:

    • 不幸的是,我已经检查了您对 sql-tag 的建议。至于 db 类型,我使用的是 H2。到目前为止还没有找到一种方法来完成上述操作。你可能知道什么?
    • 这是一篇关于在 H2 中查找约束的帖子。 stackoverflow.com/questions/10008476/…
    猜你喜欢
    • 2013-06-27
    • 2014-09-12
    • 2021-12-30
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多