我可以根据唯一的列约束使Hibernate替换对象吗?

时间:2012-06-26 19:44:38

标签: hibernate replace save unique-constraint

我正在使用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根据唯一列保存或替换对象,或者我是否需要首先搜索对象,如果存在则将其删除,然后重新插入?

1 个答案:

答案 0 :(得分:2)

我认为你是对的,但是最接近你想要做的事情的是这里记录的 - Can Hibernate work with MySQL's "ON DUPLICATE KEY UPDATE" syntax?

根据您尝试做的事情,我会担心如果已经存在具有相同键/约束的记录,您将很乐意覆盖现有记录。

我更愿意完全删除唯一约束,并为该orderId获取具有最大Id的那个。这样,您至少可以保留与该orderId的所有合同的备份副本。然而,这显然对内存空间的效率较低。