【发布时间】:2016-07-28 14:43:43
【问题描述】:
出于并发目的,我需要在从 AVAILABLE 池中选择时将数据库列的状态更新为 USED。
我正在考虑尝试@Modifying和@Query(根据where子句查询更新状态)
一切都很好,但这是一个更新查询,因此它不会返回更新后的数据。
那么,是否可以在spring数据中,更新并返回一行,让谁先读到该行,就可以独占使用。
我的更新查询类似于UPDATE MyObject o SET o.state = 'USED' WHERE o.id = (select min(id) from MyObject a where a.state='AVAILABLE'),所以基本上最低的可用 id 将被标记为已使用。有一个锁定选项,但是这些需要异常处理,如果另一个线程发生异常,然后再试一次,这在我的场景中是不被批准的
【问题讨论】:
-
在这种情况下你仍然需要锁定和异常处理,因为你还要如何防止并发请求访问同一行......
标签: java spring hibernate spring-data spring-data-jpa