如何在Spring数据中指定javax.persistence.lock.scope

时间:2018-10-17 11:19:11

标签: spring spring-boot spring-data-jpa spring-data

我正在将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数据中添加这样的属性?

2 个答案:

答案 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尚不支持。

来自Hibernate Docs

Related Ticket