如何防止Oracle数据库+ Hibernate中的死锁

时间:2015-06-04 18:44:09

标签: java oracle hibernate oracle10g oracle-enterprise-manager

我正在使用Java / Hibernate的oracle数据库,如下表所示:

Id| Status |....
1  PENDING
2  COMPLETED

从两个不同的事务中,执行以下查询:

1)select particular record, then update it
for(select some record from table){
  update record status to COMPLETED
  session.flush()
}
2) update records bunch
update table set status = 'PENDING' where....

(查询可以按任何顺序执行,因此#1可能在#2之前发生,反之亦然)

结果我有查询2)永远执行,所以我认为这是死锁情况。 Oracle Enterprise Manager显示查询2)等待TX锁定。

我该如何处理这种情况?

我在Hibernate中读到了select ... for update构造(lockmode.upgrade),但在这种情况下,我认为它会锁定整个表,因此执行时间会增加。

0 个答案:

没有答案