Hibernate cung cấp chế độ Khóa UPGRADE_SKIPLOCKED.
Sử dụng JPA và Hibernate, để tạo "SKIP_LOCKED" theo Hibernate LockMode tài liệu, bạn phải kết hợp PESSIMISTIC_WRITE JPA LockModeType :
entityManager.find(Department.class, 1, LockModeType.PESSIMISTIC_WRITE);
và cài đặt Khóa thời gian chờ, chẳng hạn như trong Persence.xml cho đơn vị độ bền của bạn:
<properties>
<property name="javax.persistence.query.timeout" value="-2"/>
</properties>
(Lưu ý rằng bạn cũng có thể định cấu hình LockMode này cho truy vấn phức tạp)
SKIP LOCKED không phải là một phần của ANSI SQL. Một số RDBMS như sau cung cấp tính năng này như một tính năng cụ thể:
Vì vậy, với JPA thuần túy, không thể chỉ định "SKIP LOCKED" trong các truy vấn. Thực tế, như được ghi lại trong LockModeType , JPA 2.1 chỉ hỗ trợ những điều sau:
- KHÔNG CÓ
- TỐI ƯU
- OPTIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_FORCE_INCREMENT
- PESSIMISTIC_READ
- PESSIMISTIC_WRITE
- ĐỌC
- VIẾT
Tuy nhiên, để bật SKIP LOCKED trong truy vấn của mình, bạn có thể sử dụng các lựa chọn thay thế sau:
- Sử dụng tính năng triển khai JPA cụ thể, chẳng hạn như Hibernate LockMode cho phép chỉ định SKIP ĐÃ KHÓA qua truy vấn JPA, nhờ sự kết hợp của PESSIMISTIC_WRITE Cài đặt cụ thể của LockModeType Lock Timeout như được mô tả ở trên
- Tạo một truy vấn SQL gốc như bạn đã làm