我的应用程序中的某些实体需要在某个事务的范围内被锁定。 我需要锁定参与事务的所有实体,并且不想创建用于锁定DAO上的实体的特殊方法。 我正在使用spring的声明性事务并为该特定方法调用设置隔离级别,但是当获取数据时生成的SQL查询是正常的SELECT而不是SELECT XXX FOR UPDATE。 我是否必须在hibernate上的事务上手动指定每个参与实体的锁定? 这不应该通过事务隔离来控制吗? 在hibernate的会话中将锁定模式设置为UPDATE时,我可以看到正确的查询,这是否意味着我需要手动指定锁定,即使我已经指定了隔离。
最佳
答案 0 :(得分:0)
是。隔离级别和锁定是不同的东西,并且肯定不会从事务隔离控制锁。除非你有充分的理由,否则我会建议你不要使用隔离级别。
查询时应使用悲观锁定对所选实体应用SELECT ... FOR UPDATE。
这会对你有所帮助