あなたのコードは大丈夫です。覚えておく必要があるのは、PESSIMISTIC_WRITEがSELECT … FOR UPDATE SKIP LOCKED
を使用することだけです。 OracleおよびPostgreSQL9.5 。 JPAに、新しいバージョンのPostgresを何を使用するかを伝えるのを忘れていたかもしれません。したがって、2つのオプションがあります:
-
SKIP LOCKED
をサポートするPostgreSQLダイアレクトを使用していることをJPAに伝えます :
この後、目的の出力を受け取りました:spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQL10Dialect
そして明らかに、トランザクションが完了するまで、並行スレッドはロックされた行をフェッチできませんでした。where subscripti0_.valid_until<=? and subscripti0_.status='ACTIVE' for update of subscripti0_1_ skip locked
- ネイティブクエリを使用する:
SELECT * FROM objects o WHERE o.valid_until <= :validUntil FOR UPDATE SKIP LOCKED