ऐसा लगता है कि आपके कॉन्फ़िगरेशन के लिए, कंटेनर-प्रबंधित लेनदेन डिफ़ॉल्ट रूप से उपयोग किए जाते हैं। इस मामले में आपको लेन-देन सिंक्रनाइज़ेशन का एक तरीका परिभाषित करने की आवश्यकता है ताकि दृढ़ता परत अधिसूचित हो (और उदाहरण के लिए दूसरे स्तर के कैश को अपडेट कर सके)। तो आपको परिभाषित करने की आवश्यकता है manager_lookup_class
निम्नलिखित के रूप में संपत्ति:
// For GlassFish:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.SunONETransactionManagerLookup
// For WebSpere:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.WebSphereExtendedJTATransactionLookup
// For JBoss:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
// For OpenEJB:
hibernate.transaction.manager_lookup_class=org.apache.openejb.hibernate.TransactionManagerLookup
साथ ही आपको उन व्यावसायिक विधियों को चिह्नित करना होगा जो डेटा स्तर को "लेन-देन संबंधी" के रूप में एक्सेस करती हैं। इसके लिए आपको उन्हें @javax.ejb.TransactionAttribute(REQUIRED)
से मार्क करना होगा। (देखें यहां
इस एनोटेशन के बारे में अधिक जानकारी के लिए)।
आपके पास बीन-प्रबंधित लेनदेन पर स्विच करने का विकल्प भी है। आप यह कहकर कर सकते हैं:
hibernate.transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
तब लेन-देन शुरू/समाप्त करने के लिए बीन जिम्मेदार है:
org.hibernate.Session session = ...;
org.hibernate.Transaction tx = null;
try {
tx = session.beginTransaction();
session.createQuery(...); // do some staff
tx.commit();
} catch (HibernateException e)
{
if (tx != null) {
tx.rollback();
}
}