JPA 管理关联关系问题

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

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

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

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

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

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

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

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

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

你好,你看用触发器 可以不,两张表都加上触发器