ai_test 2012-03-01 09:56
浏览 374
已采纳

JPA 管理关联关系问题

问题描述:
双向多对多关系,比如:老师-学生,老师实体为关系持有方(mappedBy属性在学生实体),这样会有一个中间表 比如名称为:teacher_student.
现在因业务需要,做删除动作的时候,只能删除关联关系,并且既可以从老师实体方删除,也能从学生实体方删除.
从老师实体放删除这个jpa可以实现,可是从学生实体方去删除关联关系表怎么实现?
目前一个解决办法就是利用 EntityManager 调用createNativeQuery()执行本地sql直接操作中间表,可是这样的操作方式放在组件里总感觉是那么的"突兀",有没有更好的解决办法,比如:是否可以用jpql语句?
请各位大神不吝赐教!

注: Student 和 Teacher 中多对多彼此都是 Set t = new HashSet();

  • 写回答

2条回答 默认 最新

  • justin051 2012-03-01 14:53
    关注

    对于你这个需求,我都建议不要去显式的维护关系了.
    简单说下我采用的方案吧。

    Teacher 类就放teacher的信息
    Student 类中就放student的信息

    偷懒的话,自己建张表,TEACHER_STUDENT_RELATION 里面放tid及sid
    不过这样的话,就得写sql了。

    所以我一般都是建一个TeacherStudentRelation这个实体,里面可以直接存放
    tid及sid,可以做个改进,做个TeacherStudentRelationPK类,里面存tid,sid,
    并且声明称Embeddable类型的,TeacherStudentRelationPK做成TeacherStudentRelation
    的主键,实际上是tid+sid的复合主键。

    经过上面的处理,你就可以使用JPQL完全面向对象(实体类)操作了。

    ps. 遇到关系复杂的时候,自己处理关系比声明@ManyToMany好多了。

    说了这么多,不知道说清楚没。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格