JPA / Hibernate可以与其他持久性框架(如jOOQ)结合使用

问题描述 投票:7回答:2

我们有一个域,其中90%的类非常简单,并且可以在数据库中轻松地以1:1进行映射。我非常高兴Hibernate如何结合spring-data-jpa为这些类消除了大量的杂务。

然而,域的其余部分具有挑战性,并且出于多种原因我不想直接将其映射到DB表。

我做了实验来介绍由Hibernate管理的中间bean,并将这些bean映射到我的域,当所有关系从挑战到简单部分时,这都很有效。当我拥有Hibernate管理的“简单”类时,这种方法失败,它引用了在自定义Java代码中映射的“挑战”类,而不是直接管理hibernate。

这是当我意识到我找不到自定义Hibernate和插入某种ObjectFactory的方法时,它允许我在运行中进行这样的转换。

- 编辑 -

我的问题是:在使用JPA时,实体中具有零DB问题的DDD样式域层的最简单方法是什么?在DDD中,所有数据库问题都由存储库处理,存储库通常与DAO协作。

实体中的零DB关注意味着Domain类中没有JPA注释或映射配置。一种方法是让JPA(或其他持久性技术)管理映射到域实体的TO。如果我走这条路线但是我必须拥有我的所有实体,即使是最简单的实体(想想地址)也要通过映射层。

我想为普通实体使用像JPA这样的“懒惰”,并能够将它们与“手动”管理的其他实体混合使用。目前我不知道允许我从JPA管理实体到非JPA管理实体的链接的聪明解决方案。我总是可以检索JPA实体,然后通过第二次调用检索非JPA实体,但是如果可能的话,我希望避免这种情况。

java hibernate jpa orm jooq
2个回答
3
投票

你可以combine JPA and jOOQ。 JPA / Hibernate非常适合编写数据:

  • 所有实体列都包含在INSERT / UPDATE中,因此您不必在添加新列时更改保存例程
  • 对隐式/显式乐观/悲观锁定的广泛支持
  • 支持优化的标识符生成器(pooled-lo optimizer)
  • 事务性后写缓存以减少锁争用(即使在MVCC DB中)
  • JDBC提取只是一种配置

SQL和jOOQ非常适合读取数据,尤其是当您想要超越SQL-92 JPA Dialect抽象时。使用本机查询(以及类型安全的jOOQ),您可以利用数据库提供的所有功能:

  • 窗口功能
  • 派生表
  • 公用表表达式和递归查询
  • MERGE
  • 批量插入/更新

最后,您很可能需要JPA和本机查询,因此jOOQ是获取当前数据库的最佳选择,同时为您提供编译时安全保障。

有关更多详细信息,请查看this free chapter from High-Performance Java Persistence


0
投票

你可以映射数据库中没有1:1表示的类,它只是映射中的更多工作。如果你想要纯POJO,那么使用Hibernates xml映射。可以映射最复杂的数据库模式,并且已经有很多关于它们的问题。为每个类和相应的数据库表/视图/函数发布一个问题,我们将找到答案。

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