使用liquibase以及Spring JPA / Hibernate的正确方法?

时间:2017-04-27 14:38:00

标签: hibernate jpa spring-data-jpa liquibase

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

现在到了我难以理解的混乱部分。我还可以使用JPA Annotations来定义像@OneToMany或@JoinColumn这样的东西吗?这将通过liquibase中的更改集完成我正在做的事情。我们还应该使用注释吗?或者我们可以使用注释吗?

有人可以解释一下这个工作流程,还是指向一个文档,该文档概述了将Liquibase,Spring Data JPA结合使用的正确方法?

1 个答案:

答案 0 :(得分:2)

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

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

Liquibase创建并发展此数据库架构。

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

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

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

我通常这样做的方式是:

  1. 创建我的Java对象模型
  2. 使用Hibernate创建DDL脚本/架构。查看架构并调整映射,直到架构看起来符合要求。
  3. 再次创建DDL并将其用作配置我的迁移工具(Liquibase或其他)的基础。在过程中再次调整脚本以获取与映射无关的内容:约束和索引的名称,附加索引和约束,特权,存储选项。
  4. 确保使用Liquibase迁移测试基本CRUD操作的测试。
  5. 当然,如果从数据库模型开始,您的过程可能会有很大不同。