gpt4 book ai didi

Hibernate并发插入

转载 作者:行者123 更新时间:2023-12-02 14:42:29 25 4
gpt4 key购买 nike

我遇到了一个问题。我有一个带有 Hibernate 的应用程序,它以并发模式将 XML 文件中的数据加载到表中。数据的某些部分可能是相同的,并且可以从不同的线程插入。每个线程都在其自己的长时间运行事务中工作。当两个或多个步骤尝试提交事务时会出现问题。例如,两个线程将记录插入到对 NAME 字段有约束的表 City 中。这意味着ConstraintViolationException发生在flush()或commit()上。我想自动处理这种碰撞,并希望用旧的已插入对象替换新的问题对象。这可能吗?我研究了 Hibernate 中的 saveOrUpdate() 和乐观版本控制。

最佳答案

我假设您使用 MVCC-based DBMS 之一.

如果事务隔离级别不高于 READ COMMITTED,则可以通过在插入新城市之前发出查询来检查是否存在具有相同名称 的城市来降低冲突概率。

请注意,saveOrUpdate() 在这里无济于事,因为 name 不是主键。另请注意,您根本无法防止冲突(至少在不使用某些 DBMS 特定功能的情况下),因为基本上它是 write skew anomaly 的示例。 ,这在基于 MVCC 的 DBMS 中是无法避免的。

此外,如果导入 XML 文件的原子性并不重要,您可以将长事务分成几个较短的事务,并在违反约束的情况下简单地重试它们。

关于Hibernate并发插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6030527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com