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

问题描述 投票:1回答:1

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

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

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

hibernate jpa spring-data-jpa liquibase
1个回答
2
投票

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

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

Liquibase创建并发展此数据库模式。

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

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

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

我通常这样做的方式是:

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

当然,如果从数据库模型开始,您的过程可能看起来非常不同。

© www.soinside.com 2019 - 2024. All rights reserved.