[英]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.