如何级联删除条目而不级联到ManyToMany关系

时间:2010-10-29 14:31:46

标签: java hibernate cascade

我有一段代码通过首先级联删除它来更新数据库中的条目,然后将其替换为新对象,因为我在尝试正常更新时遇到了很多问题。这个hack运行正常,直到我开始使用一些ManyToMany关系。这是给出问题的关系:

@ManyToMany(cascade = CascadeType.ALL)
private Set<RefProg> refProgSet = new HashSet<RefProg>();

它驻留在名为PDBEntry的域对象中。 RefProg域对象具有以下代码:

@ManyToMany(mappedBy = "refProgSet")
private Set<PDBEntry> pdbEntrySet = new HashSet<PDBEntry>();

现在您可能已经猜到了,当您尝试删除PDBEntry时,这非常错误。假设PDBEntry“ENT1”具有RefProg“REFPROG1”,PDBEntry“ENT2”具有相同的RefProg。现在,当我尝试级联删除“ENT1”时,它也会尝试删除“REFPROG1”,这应该是不可能的,因为它仍然链接到“ENT2”。但是如果我没有将RefProg设置为级联删除,它将不会删除Hibernate为我构建的连接表中的相关行,给我一个错误,它无法删除PDBEntry。而且由于Hibernate正在制作连接表,我似乎无法访问它。我是不是很顽固,我应该使用更新而不是先尝试删除条目然后再输入新条目,还是有其他方法使这项工作?也许是否有一些注释使级联进入连接表而没有进一步?想法?

1 个答案:

答案 0 :(得分:1)

您是否尝试在调用删除PDBEntry之前从pdbEntrySet中删除PDBEntry和/或反之亦然?