मुझे डेटाबेस में हाइबरनेट द्वारा किए गए प्रश्नों की मात्रा में कोई समस्या है। यहाँ मेरी क्वेरी लॉग (MySQL 5.1 का प्रयोग करके) डेटाबेस के लिए जब एक साधारण का चयन कर रही है:डेटाबेस पर हाइबरनेट क्वेरी
111125 7:18:30
27 Query SET autocommit=0
27 Query SELECT @@session.tx_isolation
27 Query select this_.id as id34_0_, this_.media_id as media3_34_0_, this_.message as message34_0_, this_.user_id as user4_34_0_ from notifications this_
27 Query rollback
27 Query SET autocommit=1
मैं 1. 0 को autocommit करना और फिर बारे में बहुत कुछ पढ़ा है मुझे पता है कि एक कनेक्शन के लिए डिफ़ॉल्ट 1 है और यह व्यवहार बदला नहीं जा सकता है। आप एसईटी autocommit = 0 चला सकते हैं लेकिन परिणाम वही है।
क्या इनमें से किसी भी प्रश्न से बचने के लिए वैसे भी है? मुझे नहीं पता कि SELECT @@ session.tx_isolation क्यों हो रहा है और रोलबैक क्यों है। जब मैं एक लेनदेन का उपयोग करता हूं तो मुझे एक प्रतिबद्धता मिलती है और फिर रोलबैक मिलता है। निश्चित नहीं है कि रोलबैक हमेशा क्यों सक्षम होता है।
बहुत बहुत धन्यवाद!
मेरे conf: वसंत 2.5.6, हाइबरनेट 3.6.0, Mysql 5,1
datasoure.xml:
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="initialSize" value="3" />
<property name="maxActive" value="20" />
<property name="minIdle" value="3" />
<property name="poolPreparedStatements" value="false" />
<property name="defaultAutoCommit" value="false" />
<property name="defaultTransactionIsolation" value="4" />
</bean>
लेन-देन प्रबंधक परिभाषा:
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
अद्यतन: नई संपत्ति
सेट करके रोलबैक निकालने के लिए प्रबंधित<property name="defaultReadOnly" value="true" />
लेकिन अब समस्या यह है कि आप एक संशोधन नहीं कर सकते हैं (कोई फर्क नहीं पड़ता कि मैं लेनदेन संबंधी एनोटेशन को केवल पढ़ने के लिए = झूठा) डीबी को एसक्यूलेक्सप्शन दे रहा हूं। यह संपत्ति सत्य को केवल पढ़ने के लिए सेट करती है। मुझे लगता है कि HibernateTemplate के साथ ऐसा करने का कोई तरीका नहीं है।
मैं आंतरिक कोड बुनाई के लिए पहलू लेनदेन का उपयोग करता हूं।
<aop:aspectj-autoproxy proxy-target-class="true" />
आपके लेनदेन विफल हो जाते हैं! क्या आपने वसंत संदर्भ में लेनदेन प्रबंधक को सक्षम किया था? और आपका लॉग सामान्य है, रोलबैक को छोड़कर मेरा समान है। – madhead
यह सिर्फ एक चयन है और इसमें कोई @transactional एनोटेशन नहीं है। ऐसा लगता है कि सबकुछ एक लेनदेन के रूप में माना जा रहा है। – Gonzalo
मेरा मतलब है देशी डीबी स्तर: 27 क्वेरी रोलबैक। यह रोलबैक लेनदेन। क्या आपके इन्सर्ट या अपडेट सही तरीके से काम कर रहे हैं? – madhead