【发布时间】:2020-05-27 04:31:34
【问题描述】:
我正在尝试在 Spring Boot 应用程序中实现 Oracle 数据库锁定。这是用例:服务应查询数据库以获取与某些条件相对应的记录列表,例如
select * from books where book_status='available';
此查询返回所有available 书籍的列表,我们只返回列表中的第一本书,然后将book_status 更新为unavailable:
update books set book_status='unavailable' where book_name='testName';
现在,在并发查询中,有可能 2 个查询可以返回同一本书,而这永远不会发生 - 我们应该总是返回不同的书。
为了实现这一点,我尝试使用select for update 查询:
select * from books where book_status='available' for update;
但这种方法并没有帮助我多个并发查询返回相同的记录。
我也尝试使用 JPA 来锁定记录,但这也没有帮助:
Query query = entityManager.createQuery("from Books where book_status='available'");
query.setLockMode(LockModeType.OPTIMISTIC);
query.getResultList();
有人能帮我弄清楚如何在并发查询中始终获得不同的记录吗?
【问题讨论】:
-
使用事务?
-
@123 你能推荐我到正确的来源来阅读交易吗?它会在数据库级别上工作吗?
-
@123 谢谢!您能否为这个问题建议事务隔离级别?
标签: spring hibernate jpa spring-data-jpa locking