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

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

最佳答案

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

根据您想要执行的操作,我会担心如果已经存在具有相同键/约束的记录,您会很乐意覆盖现有记录。

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

关于hibernate - 我可以让 Hibernate 根据唯一列约束替换对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11214843/

相关文章:

java - 无法使用 JPA 工具从数据库生成实体

java - Hibernate EntityManager 包含 Core 吗?

java - 通过 hibernate 将类映射到数据库表时出现 'Entity class not found' 错误

function - 替换 lisp 中的元素

ios - iPhone 锁定时解析 saveInBackground?

django - Django 中的外键和保存方法

java - Hibernate 4.1、Spring 3.1 和 JSF 1.2 中的 LazyInitializationException (Myfaces)

javascript - 如何替换实时预览中的文本变量?

Excel - 查找和替换多个单词

jquery - 如何向 CKeditor 4.2.1 添加带有加载 gif 的 ajax 保存按钮。 [工作示例插件]