具有约束违反异常的 hibernate 批量更新

标签 hibernate constraints

我正在批量更新大量对象并希望忽略任何重复项。
这样做的最佳方法是什么?

我的理解是,如果 ConstrainViolationException批次中的所有其他对象将被抛出 不是 被坚持。

最佳答案

这是我的解决方案:

    private void saveBatch() {
    StatelessSession session = sessionFactory.openStatelessSession();
    Transaction tx = session.beginTransaction();

    try {
        for (Object t : batchList) {
            session.insert(t);
        }
        tx.commit();
    } catch (ConstraintViolationException e) {

        log.info("Duplicate in batch...save individually");
        tx.rollback();
        session.close();
        saveIndividually();
        return;
    }

    session.close();
    batchList.clear();
}

private void saveIndividually() {
    StatelessSession session = sessionFactory.openStatelessSession();
    for (Object t : batchList) {
        Transaction tx = session.beginTransaction();
        session.insert(t);
        try {
            tx.commit();
        } catch (ConstraintViolationException e) {
            tx.rollback();
            log.warn("Ignoring duplicate: " + t);
        }

    }

    session.close();
    batchList.clear();
}

关于具有约束违反异常的 hibernate 批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8138559/

相关文章:

java - 如何使用双重多对多关系将相关实体保存在数据库中?

java - CCTOR 中的 Spring java.lang.NoClassDefFoundError

Swift:设备横向启动时约束不正确

Oracle 检查约束

jpa - 如何在 JHipster 中为实体添加唯一约束?

java - 在 OneToMany JPA 中更新父级时正在创建新的子实体

hibernate - HQL 中按字符串参数自定义顺序

java - 分离实体上的 JPA merge() 在存在时进行插入

mysql - 如何重写mysql约束语法?

cocoa-touch - 使用自动布局在导航栏中自动调整标题 View 的大小