आपका कोड ठीक है। आपको बस इतना याद रखना है कि PESSIMISTIC_WRITE एक चुनें … Oracle और PostgreSQL 9.5 . में . मुझे लगता है कि आप जेपीए को बताने के बारे में भूल गए होंगे, कि आप पोस्टग्रेस के नए संस्करण का उपयोग करना चाहते हैं। तो आपके पास दो विकल्प हैं:
- जेपीए को बताएं कि आप पोस्टग्रेएसक्यूएल बोली का उपयोग कर रहे हैं जो
स्किप लॉक
का समर्थन करता है :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