2014-07-09 99 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