繁体   English   中英

Spring Data JDBC跳过锁定

[英]Spring Data JDBC skip locked

我正在尝试使用 Spring Data JDBC 获取带有 SKIP LOCKED 修饰符的行锁。

使用 JPA (Hibernate) 时,您可以通过使用提示@QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value="-2")})来实现

我可以用 Spring Data JDBC 做到这一点吗?

就像您提到的,在 JPA 世界中,JPA 实现(例如 Hibernate)是理解javax.persistence.lock.timeout并且将(如果方言允许)将SKIP LOCKED应用于查询的实现。

使用 Spring Data JDBC,您可以获得 Spring Data 查询派生的好处,但它最终处理的抽象比 JPA 少得多,并且倾向于更频繁地使用本机 SQL。 当涉及到诸如SKIP LOCKED之类的东西时,这可能是一个挑战,它们是非标准的并且取决于所使用的 DBMS。

因此,Spring Data JDBC 中没有提示或类似概念反映 JPA 之一。 但是,由于 Spring Data JDBC 仍然允许您指定@Query (并且仅使用本机 SQL),您可以利用它来使用SKIP LOCKED

    @Query("SELECT * FROM PERSON WHERE first_name = :firstName FOR UPDATE SKIP LOCKED")
    List<Person> findByFirstNameForUpdateSkipLocked(String firstName);

据我所知,将SKIP LOCKED指定为本机查询是使用 Spring Data JDBC 完成此任务的唯一方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM