2010-01-22 89 views
0

新的實體,我偶然在一個一對多的關係相關聯的表:產品* 1 - N *庫存添加到收藏持續

@Entity 
public class Product { 
    // Identifier and properties ... 

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    public Set<Inventory> getInventories() { 
     return inventories; 
    } 

    public void setInventories(Set<Inventory> inventories) { 
     this.inventories = inventories; 
    } 

    public void addInventory(Inventory inventory) { 
     this.inventories.add(inventory); 
     inventory.setProduct(this); 
    } 
} 

-

@Entity 
public class Inventory { 
    // Identifier and properties ... 

    private Product product; 

    @ManyToOne(cascade = CascadeType.ALL, optional = false) 
    public Product getProduct() { 
     return product; 
    } 

    public void setProduct(Product product) { 
     this.product = product; 
    } 
} 

我有以下situtation :

  1. 我堅持一個產品和清空庫存設置
  2. 我加載此產品
  3. 我添加的庫存產品
  4. 我嘗試更新/合併產品

這樣做,我獲得以下exeption:

HibernateSystemException: a different object with the same identifier value was already associated with the session 
+0

如果您根本不添加庫存,它會發生嗎? – Bozho 2010-01-22 09:59:43

+0

不,沒有新的庫存保存工作正常 – woezelmann 2010-01-22 10:05:38

回答

2

唯一的例外是指具有相同值的對象該會話中存在@Id列,並且該對象與當前對象不是同一個對象。

你必須重載的InventoryhashCode()equals()(最好使用業務鍵),通過該會議將知道這是同一個實體,即使對象實例是不同的。

+0

合併()庫存給我相同的執行! 我會嘗試重寫hashcode()和equals() – woezelmann 2010-01-22 10:23:18

+0

是的,它的工作原理是:D – woezelmann 2010-01-22 14:47:58