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

我可以让Hibernate根据唯一列约束替换对象吗?,hibernate,replace,save,unique-constraint,Hibernate,Replace,Save,Unique Constraint,我正在使用Hibernate4.0.1.Final。我有一个具有唯一约束列的表 @Entity @Table(name = "cb_contract", uniqueConstraints = {@UniqueConstraint(columnNames={"ORDER_ID"})} ) public class Contract { ... @Column(name = "ORDER_ID") private String orderId; 当前,如果我尝试

我正在使用Hibernate4.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:integrity约束冲突:惟一约束或索引冲突”异常。有没有一种方法可以让Hibernate根据唯一列保存或替换对象,或者我需要先搜索对象,删除它(如果存在),然后重新插入该对象?

我认为您是正确的,但是与您尝试执行的操作最接近的操作记录在这里-

取决于您正在尝试做什么,我会担心,如果已经存在具有相同键/约束的记录,您会乐意覆盖现有记录

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

关于“复制密钥更新”语法,它能否模仿MySQL的替换语法--?这就是我最终想要做的。我尝试将“REPLACE”sql语句放入@SQLInsert注释中,但出现了一个错误,说Hibernate无法识别“REPLACE”标记。请查看-@Dave