JPA /休眠:ManyToMany删除关系
我有两个类,说Group和Person与JoinTable中映射的ManyToMany关系。JPA /休眠:ManyToMany删除关系
如果我删除与组关联的人员,我想从联接表中删除条目(而不是删除组本身!)。
我该如何定义cascade-Annotations?我没有发现一个真正有用的文档,但几个未解板的讨论......
public class Group {
@ManyToMany(
cascade = { javax.persistence.CascadeType.? },
fetch = FetchType.EAGER)
@Cascade({CascadeType.?})
@JoinTable(name = "PERSON_GROUP",
joinColumns = { @JoinColumn(name = "GROUP_ID") },
inverseJoinColumns = { @JoinColumn(name = "PERSON_ID") })
private List<Person> persons;
}
public class Person {
@ManyToMany(
cascade = { javax.persistence.CascadeType.? },
fetch = FetchType.EAGER,
mappedBy = "persons",
targetEntity = Group.class)
@Cascade({CascadeType.?})
private List<Group> group;
}
我相信你想要的是:
cascade = CascadeType.ALL
要删除DB关系,从每个组中删除的关联。从Group.persons集合中删除此人,并从Person.group集合中删除该组,然后保留您的人员对象。
级联不会清除剩余的引用到保留在内存中的Group
对象上的已删除的Person
。你必须手动完成。似乎级联应该这样做,但可悲的是,这不是它的工作方式。
根据您提问中提供的信息,我不认为您需要在您的Person
或Group
实体上设置任何级联选项。听起来不像他们分享父母/子女关系,而一个人的存在取决于另一个。这是我期望看到一些级联选项的那种关系。
嗯好的,谢谢。顺便说一句。在哪里有一个可用的级联文档,以及如何以合理的方式组合jpa和hibernate注释? – tautologe 2010-11-20 22:09:51
我使用Hibernate作为提供者,但我只通过JPA接口与它交互。我不是回答有关Hibernate特定注释问题的合适人选。抱歉。 – 2010-11-21 15:05:14
你可以专门做一个数据库(取决于你的数据库和它的能力)。通过在关系表的外键上添加“删除级联”。
我想在删除人物对象时自动删除关联。我的意图是不必手动执行此操作。如果必须,我不需要级联。还是我的Cascading-feature错误? – tautologe 2010-11-19 00:10:56
你必须。级联不这样做。 – 2010-11-19 04:00:49