我有一组彼此连接的实体形成一个周期,即父实体P与两个子实体C1和C2具有两个一对多的关系,并且每一个与另一实体具有一对多的关系A.实体A实现这些实体(C1,C2)的关联,并定义关系的属性(不仅仅是连接表).所有关系都可以在两个方向通航.

以下问题来自于这种设计:由于您始终在根实体P上调用实体管理器操作,因此级联策略应该是如何被持久化/合并的?应该从两条路线到达级联?

注意事项:如果应用程序选择只提供一个级联路径,则可能会出现抛出TransientObjectException的情况.如果它提供了两个路径,那么这些路径必须进行完整的循环,因为可以尝试通过A保存示例C1.

版本:JPA 2.0,Hibernate内核4.1.7,hibernate-jpa-2.0-api 1.0.1

解决方法

我可以给你我的2美分,对不起,如果我的答案有点长.

如果您有这种级联冲突,可能是因为您的级联方法或域模型定义不明确.我会小心地将一个级联策略推广到一个整体图形,或一组不相关的元素.

我的建议是,级联策略应该仅用于强大地绑定在一起的数据集,并且类似于在java世界中的类和其(私有)内部类的相同类型.母亲阶级与子女之间的关系也应该是排他性的(在UML中,它被称为非共享协会).

当然,你可以做其他事情(我们都可以懒惰),但是最终你可以创建一个单一的持久性流(或持久性配置)和你的业务流之间的耦合网络.您将不得不管理大量的异常,并在您先前放置的级联策略(保存,更新,删除)中执行大量配置逻辑.

极端的做法是有些人可能想要只保存一个大的根对象.为什么不?其余的“应该坚持下去”.但事实上,这可能会严重限制系统的可维护性.此外,在加载,保存和合并时,您可能需要管理内存中的大图形状态.

如果您执行Web应用程序或任何客户端 – 服务器应用程序,则Web工作流程应能够在每个请求中保存有限的一组对象,而无需从根元素中保存所有内容.我知道我没有直接回复你的问题.所以让我们回到你的例子:

说P是一个银行,C1和C2是两个客户,A是一个产品.

我有两个简单的答案:
1)每层可以单独保存,无需任何级联.但是它可以在同一个事务中完成,如果你想要的话也可以在同一个DAO中执行.

2)P和C“可以”级联.但是A必须保存在不同的工作流程中.

这让我想起了Peter Coad的一章,他谈到了“域驱动分析”:http://www.petercoad.com/download/bookpdfs/jmcuch01.pdf

本章介绍了如何在不同的原型中分离图形中的不同对象.事务数据和描述之间的持久性工作流程不应该相同,也可以是“事情”.这有助于建立更好的级联策略:

The four archetypes of Peter Coad are:
 - Is it a moment or interval? 
 - Is it a role played? 
 - Is it a catalog-entry-like description? 
 - Otherwise,it's a party,place,or thing.

我希望它有帮助.

java – JPA Hibernate – 实体关系中的循环 – 级联策略的更多相关文章

  1. Spring Data JPA系列JpaSpecificationExecutor用法详解

    这篇文章主要为大家介绍了Spring Data JPA系列JpaSpecificationExecutor用法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  2. Spring Boot 整合持久层之Spring Data JPA

    在介绍Spring Data JPA的时候,我们首先认识下Hibernate。Hibernate是数据访问解决技术的绝对霸主,使用O/R映射技术实现数据访问,O/R映射即将领域模型类和数据库的表进行映射,通过程序操作对象而实现表数据操作的能力,让数据访问操作无须关注数据库相关的技术

  3. cascade级联关系操作案例详解

    这篇文章主要介绍了cascade级联关系,主要包括级联保存,级联修改,级联删除案例,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下

  4. 使用JPA插入枚举类型字段

    这篇文章主要介绍了使用JPA插入枚举类型字段,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  5. 使用JPA单项一对多外键关联

    这篇文章主要介绍了使用JPA单项一对多外键关联,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  6. 使用spring jpa 如何给外键赋值

    这篇文章主要介绍了使用spring jpa 如何给外键赋值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. easyui下拉框动态级联加载的示例代码

    本篇文章主要介绍了easyui下拉框动态级联加载的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. Spring JPA 增加字段执行异常问题及解决

    这篇文章主要介绍了Spring JPA 增加字段执行异常问题及解决,具有很好的参考价值,

  9. Spring Data JPA踩坑记录(@id @GeneratedValue)

    这篇文章主要介绍了Spring Data JPA踩坑记录(@id @GeneratedValue),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  10. Spring Boot深入学习数据访问之Spring Data JPA与Hibernate的应用

    Spring Data JPA是Spring Data的子项目,在使用Spring Data JPA之前,先了解一下Hibernate,因为Spring Data JPA是由Hibernate默认实现的

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部