我正在使用Hibernate 4.0.1.Final。我有一个带有唯一约束列的表...
@Entity
@Table(name = "cb_contract",
uniqueConstraints = {@UniqueConstraint(columnNames={"ORDER_ID"})}
)
public class Contract {
...
@Column(name = "ORDER_ID")
private String orderId;
目前,如果我尝试保存两个订单ID列具有相同值的对象,请使用以下方法...
protected void saveOrUpdate(Object obj) {
final Session session = sessionFactory.getCurrentSession();
session.saveOrUpdate(obj);
}
保存第二个实例时,我收到“org.hibernate.exception.ConstraintViolationException:完整性约束违规:唯一约束或索引违规”异常。有没有办法让Hibernate根据唯一列保存或替换对象,或者我是否需要首先搜索对象,如果存在则将其删除,然后重新插入?
答案 0 :(得分:2)
我认为你是对的,但是最接近你想要做的事情的是这里记录的 - Can Hibernate work with MySQL's "ON DUPLICATE KEY UPDATE" syntax?
根据您尝试做的事情,我会担心如果已经存在具有相同键/约束的记录,您将很乐意覆盖现有记录。
我更愿意完全删除唯一约束,并为该orderId获取具有最大Id的那个。这样,您至少可以保留与该orderId的所有合同的备份副本。然而,这显然对内存空间的效率较低。