我试图同时调用相同的API,即在db中的hibernate join表中创建一些行,并且某些列上有一些唯一约束。
@Entity
public class Customer {
...
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "CustomerProduct", joinColumns = { @JoinColumn(name = "cp_customer_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "cp_product_id", nullable = false, updatable = false) })
@OrderBy("id")
private Set<Product> products = new HashSet<Product>(0);
...
}
@Entity
public class Product{
....
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "CustomerProduct", joinColumns = { @JoinColumn(name = "cp_product_id", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "cp_customer_id", nullable = false, updatable = false) })
private Set<Customer> customers = new HashSet<Customer>(0);
....
}
cp_product_id + cp_customer_id是CustomerProduct表中的唯一键(Hiberante连接表)。我从这张表中得到例外。
fun()
{
Product productDO = getById(....);
// DO to DTO
for (Customer cr : customerList) {
productDTO.customers.add(cr);
}
// DTO to DO
saveOrUpdate()
commit()
}
在第一次通话中我得到了适当的回应。在第二次调用中,我在提交行中出错,它显示重复的条目。这是预期的,因为相同的密钥已保存在DB中,但我怎样才能避免此错误。 因为在saveOrUpdate之前已经检查了重复的密钥。 saveOrUpdate方法是否在DB中保留数据,或者仅在db中提交存储数据。
请告诉我任何好主意,以避免此错误。我是hibernate的新手,对saveorupdate和commit没有太多了解。
为什么hibernate乐观锁定无法解决这个问题?