如何处理并发事务?

时间:2012-02-12 13:24:12

标签: 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次?

问候, 米

1 个答案:

答案 0 :(得分:0)

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

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