hibernate中的HashMap包含了自己

时间:2014-07-09 08:38:43

标签: java hibernate collections

我有实体,我想添加hashMap包含自己的字段和出现次数

@Entity
public class MyClass {
    ...
    @OneToMany(fetch=FetchType.LAZY)
    @Fetch(FetchMode.SUBSELECT)
    private Map<MyClass, Integer> myClassRelation = new HashMap<MyClass, Integer>();
    ....
}

我想达到以下结果:我想要一些可以包含MyClass类MyClass类的集合的集合,并且我希望有可能在此集合中添加重复项。我尝试使用ArrayList达到这个目的,但是当我添加了副本时:

@Entity
public class MyClass {
    ...
    @OneToMany(fetch=FetchType.LAZY)
    @Fetch(FetchMode.SUBSELECT)
    private List<MyClass> myClassRelation = new ArrayList<MyClass>();
    ....
}

MyClass myClass = new MyClass();
//add the same object 2 times
myOterClass.getMyClassRelation().add(myClass);
myOterClass.getMyClassRelation().add(myClass);

然后我有以下错误:

org.hibernate.exception.ConstraintViolationException: Violation of UNIQUE KEY constraint 'UQ__FORMULAR__058FE285EB0330EE'. Cannot insert duplicate key in object

如何多次向此集合添加同一对象。我应该使用哪种收藏类型?

1 个答案:

答案 0 :(得分:0)

你有一种反身关系,这意味着。你的MyClass与你的MyClass有关。

MyClass 1 --> * MyClass

所以当你做以下

myOterClass.getMyClassRelation().add(myClass);
myOterClass.getMyClassRelation().add(myClass);

您尝试两次添加相同的值。因为MyClass只有一个表。