2012-01-16 69 views
2

我有一个A级:Hibernate单向@ManyToMany:删除没有约束违规?

@Entity 
public class A { 
    ... 
    @ManyToMany 
    private Set<Ref> refs = new HashSet<Ref>(); 
    ... 
} 

和A类编号:

@Entity 
public class Ref { 
// no link to A 
} 

我想删除A和A_Ref但参考,但我得到一个org.hibernate.exception.ConstraintViolationException

是否有一个简单的方法来做到这一点,或者我应该明确创建一个A_Ref类?

感谢

编辑: 我试图在HQL删除一个直接的名单。我做了它的对象(打破了关系),它工作(级联+孤儿删除)。

回答

1

我不确定,如果我对你有所了解,但是从我理解我的第一个猜想是,你还没有使用所有必要的注释来确保hibernate会自动删除Ref中的必要引用。

在manyToMany关系中,可以使用joinTables和cascadetypes来确保hibernate知道删除所有必要关系的位置,而不必为其创建自己的domainObject。

有很多不错的指南如何管理它。在第一次查看从mkyong指南看起来不错。注意:他注释了getters而不是变量声明! (这只是一个味道问题)。

+0

“参考”表是一个参考,从许多其他类链接的数据。所以我不能声明双向@ManyToMany(就像你在教程中所说的那样)。 joinColumn是如果你想覆盖默认设置,但我没有在那里看到相关的属性。 – 2012-01-16 17:24:49

+0

我不确定,如果它甚至有必要,只要你只想在你的对象A中使用它的一个方向。重要的是自动删除引用是CascadeType属性。在答案中添加了对cascadetypes的引用。 – crusam 2012-01-16 17:32:15