hibernate - 将 liquibase 与 Spring JPA/Hibernate 一起使用的正确方法?

标签 hibernate jpa spring-data-jpa liquibase

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

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

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

最佳答案

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

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

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

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

Liquibase 没有关于应该如何完成从模式到 Java 对象的映射以及返回的信息。

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

我通常这样做的方式是:

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

当然,如果您从数据库模型入手,您的流程可能会大不相同。

关于hibernate - 将 liquibase 与 Spring JPA/Hibernate 一起使用的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43660885/

相关文章:

java - Hibernate EhCache没用过?

java - JPA:@Embedded 实体如何将自身类型作为字段?

java - JPA findby 过滤子字符串列表

java - Spring Data JPA - 连接表上的可分页排序

spring - @PostPersist 不会将审计记录保存到数据库

hibernate - 无法让 Hibernate Validator 与 Spring MessageSource 一起工作

java - JPA删除在后台执行更新查询

java - 使用 select new 时如何返回列表 dto

java - Hibernate OneToOne自动join抓取(解决n+1问题)

java - 子类的JPA继承