【问题标题】:Proper way to use liquibase along with Spring JPA/Hibernate?使用 liquibase 和 Spring JPA/Hibernate 的正确方法?
【发布时间】:2017-09-25 10:22:01
【问题描述】:

我有点困惑。我想将关系数据库(Postgres 或 MySQL)与 Spring JPA 一起使用。我喜欢这些注释,你可以如何定义模型和它们之间的关系、连接和使用存储库。根据我的阅读,似乎不建议使用 Hibernate 的自动 DDL 生成功能,应该禁用。这是有道理的,我想通过更稳定的 liquibase 跟踪代码中的数据库更改。

现在是我难以理解的令人困惑的部分。我仍然可以使用 JPA 注释来定义 @OneToMany 或 @JoinColumn 之类的东西吗?这正是我通过 liquibase 中的变更集所做的事情。我们应该继续使用注解,还是更愿意?

有人可以解释一下这个工作流程,或者指向概述结合使用 Liquibase、Spring Data JPA 的正确方法的文档吗?

【问题讨论】:

    标签: hibernate jpa spring-data-jpa liquibase


    【解决方案1】:

    使用 Liquibase AND 注释不仅没问题,而且可能是最常见的用例。

    注释的用途与 Liquibase 截然不同。它们描述了如何将 Java 代码片段映射到数据库模式。

    Liquibase 创建并发展了这个数据库模式。

    注释不包含有关架构不同版本的信息。这就是为什么您不应该将 Hibernates DDL 生成用于您的实际生产模式,尽管它在某种程度上可能适用于开发和测试。当然,在某些时候,您应该使用生成的模式来测试您的应用程序,该模式生成的方式与为生产环境生成的方式完全相同。

    Liquibase 没有关于如何从您的架构映射到 Java 对象并返回的信息。

    当然,有重叠。如果您的注释说某个字段应该映射到表 t 中的列 x,Liquibase 应该使用该列(以及 Hibernate 期望的类型)创建该表。

    我通常这样做的方式是:

    1. 创建我的 Java 对象模型
    2. 使用 Hibernate 创建 DDL 脚本/架构。查看架构并调整映射,直到架构看起来符合要求。
    3. 再次创建 DDL 并将其用作配置我的迁移工具(Liquibase 或其他)的基础。在此过程中针对与映射无关的内容再次调整脚本:约束和索引的名称、附加索引和约束、权限、存储选项。
    4. 确保有适当的测试来测试使用 Liquibase 迁移的基本 CRUD 操作。

    当然,如果您从数据库模型开始,您的流程可能看起来会大不相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 2019-12-20
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      相关资源
      最近更新 更多