我有这个简单的情况:
@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 具有相同的类别,我在类别上有 NonUniqueObjectException 因为相同的类别在会话中并且休眠尝试保存_更新它。
我在 Product 和 Category 实体中都需要 CascadeType.SAVE_UPDATE,那么我该如何解决这个问题?谢谢。