2014-07-09 52 views
0

我有实体的,我要添加字段,它是HashMap中包含自己和出现次数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

显示完整的MyClass类。看起来像你有一个ID或唯一约束。 – shazin

+0

是的,我有:@Id \t @GeneratedValue(策略= GenerationType.IDENTITY) \t @Column(name = “F_ID”,可为空= FALSE) \t私人长期ID;等什么?我不会创造许多次相同的元素。我将现有的元素(MyClass myClass = new MyClass();)添加到列表 – user2539823

回答

0

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

MyClass 1 --> * MyClass 

所以,当你做到以下

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

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

+0

那么,我怎样才能达到desribed关系。我必须有可能添加到数组重复。我创建了包含myClass和发生次数的Map,但正如我在第一篇文章中所说的,存在使用OneToMany注释和map的错误。有任何想法吗? – user2539823