我正在使用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
),但在这种情况下,我认为它会锁定整个表,因此执行时间会增加。