मेरे पास एक विधि है, जिसे @ ट्रांसेक्शनल के रूप में चिह्नित किया गया है। इसमें कई कार्य शामिल हैं, उनमें से एक जेडीबीसी और दूसरा एक - हाइबरनेट, तीसरा - जेडीबीसी का उपयोग करता है। समस्या यह है कि हाइबरनेट फ़ंक्शन द्वारा किए गए परिवर्तन अंतिम कार्यों में दिखाई नहीं दे रहे हैं, जो जेडीबीसी के साथ काम करता है।एक लेनदेन में हाइबरनेट और जेडीबीसी
<bean id="myDataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
<property name="targetDataSource" ref="targetDataSource"/>
</bean>
<bean id="targetDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close" lazy-init="true" scope="singleton">
<!-- settings here -->
</bean>
myDataSource सेम कोड में प्रयोग किया जाता है:
@Transactional
void update() {
jdbcUpdate1();
hibernateupdate1();
jdbcUpdate2(); // results of hibernateupdate1() are not visible here
}
सभी कार्यों में एक ही डेटा स्रोत का उपयोग करने के लिए कॉन्फ़िगर कर रहे हैं। myDataSource.getConnection() JDBC कार्यों में कनेक्शन के साथ काम करने के लिए प्रयोग किया जाता है और
getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
...
}
});
हाइबरनेट समारोह में प्रयोग किया जाता है। धन्यवाद।
उन लोगों के लिए, जो Google से यहां आएंगे, इस समस्या के लिए मेरा समाधान। मैंने हाइबरनेट फ्लश फ़ंक्शन के अंत में session.flush() जोड़ा। इसके बाद, इसका परिणाम परिणाम अगले जेडीबीसी रीड फ़ंक्शन (उसी लेनदेन में) में उपलब्ध है। – alex543