2011-09-14 21 views
6

के साथ हाइबरनेट अलगाव स्तर हम हाइबरनेट 3.2.5 के साथ पोस्टग्रेज़ 9.1.0 का उपयोग कर रहे हैं।पोस्टग्रेज़ 9.0

मैंने नवीनतम जेडीबीसी ड्राइवर JDBC4 Postgresql Driver, Version 9.1-901 डाउनलोड किया है।

मैंने हाइबरनेट अलगाव संपत्ति सेट की थी।

<property name="connection.isolation">2</property> 

जो

2=READ_COMMITTED 

का मतलब है लेकिन जब डेटाबेस का उपयोग करने की कोशिश कर यह मुझे त्रुटि देता है।

Caused by: org.postgresql.util.PSQLException: Cannot change transaction isolation level in the middle of a transaction. 
at org.postgresql.jdbc2.AbstractJdbc2Connection.setTransactionIsolation(AbstractJdbc2Connection.java:821) 
at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:103) 
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423) 

यदि मैं अलगाव स्तर की संपत्ति को हटा देता हूं। यह बढ़िया काम करता है। किसी भी मदद

उत्तर

5

त्रुटि संदेश को देखते हुए सराहना की थी: "एक सौदे के बीच में लेन-देन अलगाव स्तर को बदल नहीं सकते", ऐसा लगता है कि हाइबरनेट लेन-देन (एक का चयन करें चलाकर जैसे) शुरू होता है और उसके बाद की कोशिश करता है अलगाव स्तर बदलें।

यह हाइबरनेट के पोस्टग्रेएसक्यूएल एकीकरण में एक बग प्रतीत होता है, क्योंकि इसे अलगाव स्तर को बदलने से पहले कनेक्शन या अंतराल जारी करने से पहले जो कुछ भी शुरू किया गया है, उसे खोलने के बाद पहली बार अलगाव स्तर को बदलना चाहिए ।

आपका एकमात्र विकल्प (बग रिपोर्ट खोलने के अलावा) अलगाव सेटिंग छोड़ना है। चूंकि READ_COMMITTED पोस्टग्रेज़ के लिए डिफ़ॉल्ट अलगाव स्तर है, फिर भी कोई फर्क नहीं पड़ता है।

+0

मैंने 'अलगाव सेटिंग' छोड़ी है। और यह काम कर रहा है –

+0

मैं हाइबरनेट 3 से हाइबरनेट 4 तक किसी एप्लिकेशन को अपग्रेड करने के हिस्से के रूप में एक ही समस्या का पीछा कर रहा हूं। ऐसा लगता है कि उपयोगकर्ता परिभाषित प्रकारों को इकट्ठा करने के लिए पोस्टग्रेस के खिलाफ प्रारंभ करने और क्वेरी करने के लिए हाइबरनेट के साथ कुछ करना है। –

+0

मुझे विश्वास है कि अगर आपके पास एक कनेक्शन पूल कॉन्फ़िगर किया गया है, तो आपको समस्या दिखाई नहीं देगी। मेरी स्थिति में, यह केवल परीक्षणों को प्रभावित करता था, और मैं लेनदेन अलगाव निर्दिष्ट नहीं करने के लिए अपनी टेस्ट कॉन्फ़िगरेशन को बदलने में सक्षम था। –

1

मुझे कोई हाइबरनेट विशेषज्ञ हूँ, और अगर आप अलगाव के स्तर को बदलने या एक स्तर पर सब कुछ कर जाने की जरूरत है मैं नहीं जानता, लेकिन आप की तरह कुछ के साथ अपने डेटाबेस के लिए डिफ़ॉल्ट अलगाव स्तर सेट कर सकते हैं:

ALTER DATABASE mydatabase SET default_transaction_isolation = 'serializable' 
\g 

http://www.postgresql.org/docs/9.1/interactive/sql-alterdatabase.html

देखें तुम भी ALTER USER उपयोग कर सकते हैं एक प्रति उपयोगकर्ता के आधार पर default_transaction_isolation सेट करें, या सभी डेटाबेस और उपयोगकर्ताओं के लिए अपनी postgresql.conf फ़ाइल में स्थापित करने के लिए।

+0

यह मेरी समस्या हल हो गया, धन्यवाद! –

संबंधित मुद्दे