0

私はこの単純な状況を持っています:

@Entity
public class Customer{

    @ManyToMany(fetch=FetchType.EAGER)
    @Cascade(CascadeType.SAVE_UPDATE)
    private List<Product> products=new ArrayList<Product>();

}

@Entity
public class Produtc{

    @ManyToOne
    @Cascade(CascadeType.SAVE_UPDATE)
    private Category category;
}

@Entity
public class Category{

    private String name;
}

新しい顧客を挿入するルーチン:

Customer customer=new Customer();
//customer.set data
Product p=dao.getProductBySomeUserInput...
if(p==null){
   p=new Product();
   //p.set data
}
customer.addProduct(p);
dao.save(customer);  //this row throw NonUniqueObjectException on Category class

この問題を解決するにはどうすればよいですか? 問題は CascadeType.SAVE_UPDATE に関連していると思いますが、必要です... ありがとうございます。


アップデート

私は問題を見つけました、そしてこれはそれを再現する方法です:

Customer c=new Customer();
// Load two products by id
Product p=dao.get(Product.class, 2);
Product p1=dao.get(Product.class, 3);
c.addProduct(p);
c.addProduct(p1);
// This try to update products, and category of products becouse CascadeType is SAVE_UDPATE
dao.save(c);

したがって、p と p 1 のカテゴリが異なる場合、確率はありませんが、p と p1 が同じカテゴリの場合、同じカテゴリがセッションにあり、休止状態で save_update を試みるため、Category に NonUniqueObjectException があります。

製品エンティティとカテゴリ エンティティの両方で CascadeType.SAVE_UPDATE が必要ですが、この問題を解決するにはどうすればよいですか? ありがとう。

4

1 に答える 1