java - 如何处理并发事务?

标签 java hibernate postgresql

我正在使用 Glassfish 3.1 + Hibernate 3.6 + Postgres 9,我并不完全理解我应该如何处理“长时间”运行的并发事务。

在某些情况下,我的交易最多可能需要一秒钟。发生的事情是,当我从客户端接收到事件时,我从模板表中生成了对象。两个不同的事件可能会产生一组重叠的对象。

我正在考虑这个场景:

T1 begin
T1 read objects which may already exist

T2 begin
T2 select templates which have to be processed
T1 inserts (generate objects)
T1 commit

T1 select templates which have to be processed
T1 inserts (generate objects)
T1 commit

这将如何传播给我?任何锁定异常?或者我会因为唯一索引而得到约束异常吗? 我该如何处理这种情况?在停止处理之前重新启动事件处理 3 次?

问候, 米

最佳答案

PostgreSQL 处理这种情况的方式称为多版本并发控制。基本上,并发事务在开始语句时(默认情况下)或很少在开始事务时(取决于事务级别)看到数据快照。

在这种方法中,读者永远不会阻止作者,而作者只会在读者请求时阻止读者。对于仅读取和插入,您不太可能获得锁定异常/

关于java - 如何处理并发事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249116/

相关文章:

java - 从数组(Java)中获取所有大小 n 组合的算法?

java - 在生产环境中加载 index.jsp 时出错,但在开发环境中不会

java - Hibernate不会设置id列名

postgresql - 检查 TestContainers 的内容

java - org.hibernate.Query 中的 setMaxResults 和 setFetchSize 有什么区别?

java - Android 通过 strings.xml 中的值进行切换

java - 居中 JOptionPane 图标

java - Hibernate 只加载列表中的一个对象

postgresql - 您可以根据列值将 Postgres 表导出到多个 CSV 文件吗?

postgresql - PL/pgSQL : Inserted data not available when function returns