我有实体,我想添加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
如何多次向此集合添加同一对象。我应该使用哪种收藏类型?
答案 0 :(得分:0)
你有一种反身关系,这意味着。你的MyClass与你的MyClass有关。
MyClass 1 --> * MyClass
所以当你做以下
时myOterClass.getMyClassRelation().add(myClass);
myOterClass.getMyClassRelation().add(myClass);
您尝试两次添加相同的值。因为MyClass
只有一个表。