我正在将spring boot和spring数据一起用于与数据库的数据通信。
@Lock(LockModeType.PESSIMISTIC_WRITE)
@Query("select s from Seat s where s.id=:id")
Seat findById(@Param("id")Integer id);
我已经指定了锁定,但是我还想指定其他参数,例如锁定范围,锁定超时。我已经搜索了但找不到。 我在互联网上找到的一种解决方案是使用
@QueryHints(value={@QueryHint(name = "javax.persistence.lock.scope", value ="EXTENDED" )})
但是上述解决方案不起作用,可以从下面的日志中进行验证。
休眠:选择seat0_.id作为id1_1_,seat0_.aisle_seat作为过道_se2_1_,seat0_.booking_status作为booking_3_1_,seat0_.row_name作为row_name4_1_,seat0_.screen_id作为screen_i6_1_,seat0_.seat_id作为seat_num从座位0中。进行更新
休眠:从屏幕screen0_中选择screen0_.id作为id1_0_0_,screen0_.name作为名称2_0_0_,其中screen0_.id =?
没有锁语句(用于屏幕更新)。
如何在spring数据中添加这样的属性?
答案 0 :(得分:0)
这似乎是正确的行为,因为LockModeType.PESSIMISTIC_WRITE
与"SELECT FOR UPDATE"
等效。
在@Lock(LockModeType.PESSIMISTIC_READ)
日志中可以看到使用lock in share mode
:
Hibernate: select seat0_.id as id1_0_, seat0_.seat_no as seat_no2_0_ from seat seat0_ where seat0_.id=? lock in share mode
答案 1 :(得分:0)
不幸的是,javax.persistence.lock.scope
在Hibernate中尚不受支持
JPA标准所指定的javax.persistence.lock.scope尚不支持。