2016-08-09 40 views
3

通過SO搜索,但看起來像沒有類似的案例。spring jpa - 具有相同標識符值的不同對象已與會話相關聯

有一個實體的國家,單場:

public class Country { 

    @Id 
    @Column(name = "COUNTRY_CODE") 
    private String countryCode; 

    public boolean equals(Object o) {} 

    public int hashCode() { } 
} 

而另一類具有這些條目的集合:

public class Product { 

    @ManyToOne(fetch = EAGER, cascade = ALL) 
    @JoinColumn(name = "COUNTRY_CODE") 
    private Country country; 
} 

當通過設置國家:

product.setCountry(new Country("lv")) 

我認爲只要它存在就會被保存。

而是我得到一個異常 - 用同樣的標識值不同的對象已經與會議

+0

你可以顯示堆棧跟蹤嗎? – ryekayo

回答

8

相關通過觀察儘可能多的代碼,你已經提供了這個類型的問題就來了,因爲對象不是指相同的Java對象實例。當您使用相同的會話對象進行讀取時,會發生這種情況&寫入或者如果您將同一個對象放入單個會話中。他們指的是數據庫中的同一行(即相同的主鍵),但它們是它的不同副本。所以發生的事情是管理實體的會話將跟蹤哪個Java對象對應於具有相同主鍵的行。

我會建議你嘗試下面給出的代碼。

1- Just set cascade to MERGE, that should work for you. 

     OR 

2- @GeneratedValue(strategy = GenerationType.SEQUENCE) OR Other GenerationType 
+1

這工作 - @ManyToOne(cascade = {PERSIST,MERGE}) – sandris

相關問題