Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA/Hibernate可以与其他持久性框架(如jOOQ)结合使用吗_Java_Hibernate_Jpa_Orm_Jooq - Fatal编程技术网

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

Java JPA/Hibernate可以与其他持久性框架(如jOOQ)结合使用吗,java,hibernate,jpa,orm,jooq,Java,Hibernate,Jpa,Orm,Jooq,我们有一个域,其中90%的类非常简单,可以很容易地在DB中以1:1的比例映射。我很高兴Hibernate与SpringDataJPA的结合消除了这些类的大量杂务 然而,域的其余部分很有挑战性,出于许多原因,我不想直接将其映射到DB表 我做了一个实验,引入了由Hibernate管理的中间bean,并将这些bean映射到我的域中,当所有关系都从挑战部分到简单部分时,这一点很有效。 当我有一个由Hibernate管理的“easy”类,该类引用了在自定义Java代码中映射而不是直接由Hibernate管

我们有一个域,其中90%的类非常简单,可以很容易地在DB中以1:1的比例映射。我很高兴Hibernate与SpringDataJPA的结合消除了这些类的大量杂务

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

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

这是我意识到我无法找到定制Hibernate和插入某种ObjectFactory的方法来允许我动态地进行这种转换的时候

--编辑--

我的问题是: 在使用JPA时,让DDD风格的域层在实体中没有DB关注点的最简单方法是什么?在DDD中,所有数据库问题都由存储库处理,存储库通常与DAO协作

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


我想使用一些“懒惰”的东西,比如JPA来处理琐碎的实体,并且能够将它们与其他“手动”管理的实体混合在一起。目前我还不知道一个聪明的解决方案,它允许我将JPA托管实体链接到非JPA托管实体。我总是可以通过第二次调用检索JPA实体,然后检索非JPA实体,但如果可能,我希望避免这种情况。

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

您可以将JPA和jOOQ结合起来。JPA/Hibernate非常适合编写数据:

  • 所有实体列都包含在插入/更新中,因此在添加新列时不必更改保存例程
  • 广泛支持隐式/显式乐观/悲观锁定
  • 支持优化标识符生成器(池式lo优化器)
  • 事务性写后缓存可减少锁争用(即使在MVCC DBs中)
  • JDBC抓取只需要一个配置
SQL和jOOQ非常适合读取数据,尤其是当您想要超越SQL-92 JPA方言抽象时。使用本机查询(以及类型安全的jOOQ),您可以利用数据库提供的所有功能:

  • 窗口功能
  • 支点
  • 派生表
  • 通用表表达式和递归查询
  • 合并
  • 批量插入/更新

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

您的方法似乎是以域为中心的。jOOQ的工作方式正好相反,即“您的数据库总是排在第一位”。因此,如果您在复杂Java域的持久性方面苦苦挣扎,jOOQ可能不会让您的生活变得更轻松。。。另一方面,jOOQ用户在过去成功地将jOOQ与Hibernate结合起来……Lukas,你能给我一些关于jOOQ如何与JPA结合的提示吗?@JB-请看描述,我尽了最大的努力来澄清我的问题