Kode Anda baik-baik saja. Yang perlu Anda ingat adalah bahwa PESSIMISTIC_WRITE menggunakan SELECT … FOR UPDATE SKIP LOCKED
di Oracle dan PostgreSQL 9.5 . Saya berasumsi Anda bisa lupa memberi tahu JPA, bahwa Anda harus menggunakan versi Postgres yang lebih baru. Jadi, Anda memiliki dua opsi:
- beri tahu JPA bahwa Anda menggunakan Dialek PostgreSQL yang mendukung
SKIP LOCKED
:
Setelah ini saya menerima output yang diinginkan:spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
dan jelas, utas bersamaan tidak dapat mengambil baris yang dikunci sampai transaksi selesai.where subscripti0_.valid_until<=? and subscripti0_.status='ACTIVE' for update of subscripti0_1_ skip locked
- gunakan kueri asli :
SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED