2014-11-05 74 views
1

如何在Hibernate或JDBC中处理并发插入。如何处理并发插入JPA

比方说在插入前需要检查下面的情况。

select count(1) from XYZ; 
if(cnt>2) 
throw exception; 
else 
insert into table 

现在多个线程尝试在同一时间插入记录,下面的代码很有可能会失败。

如何处理这样的情况下,此

+0

您可以使用JPA中的'@ Version'或更改数据库事务隔离或使用'SELECT ... FOR UDATE'。请参阅https://en.wikibooks.org/wiki/Java_Persistence/Locking。 – jocki 2014-11-05 05:25:32

回答

0

您将需要对表XYZ表级锁,以获得正确的计数,而不允许其他事务修改计数。

所以在JDBC:

  1. 开放连接
  2. 在桌子上XYZ
  3. 查询的表数
  4. 获取锁,如果计数不-OK回滚的连接。这将释放 锁
  5. else insert
  6. 提交事务。这将释放锁

不确定在JPA中是否有可能实现表级锁定。