यदि आप कंटेनर प्रबंधित लेनदेन तो आपको लेन-देन नीति भी जोड़नी होगी:
@Stateful
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=REQUIRED)
मैंने इस घटना को केवल दो स्थितियों में देखा है:
DataSource
ऑटो-कमिट मोड में चल रहा है, इसलिए प्रत्येक स्टेटमेंट को एक अलग लेनदेन में निष्पादित किया जाता हैEntityManager
@Transactional
. के साथ कॉन्फ़िगर नहीं किया गया था , लेकिन उसके बाद केवल क्वेरीज़ चलाई जा सकती हैं क्योंकि कोई भी डीएमएल ऑपरेशन अंत में एक लेन-देन आवश्यक अपवाद को फेंक देगा।
आइए संक्षेप में कहें कि आपने निम्न हाइबरनेट गुण सेट किए हैं:
hibernate.current_session_context_class=JTA
transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
jta.UserTransaction=java:comp/UserTransaction
जहां अंतिम गुण आपके एप्लिकेशन सर्वर UserTransaction JNDI नामकरण कुंजी के साथ सेट किया जाना चाहिए।
आप इसका उपयोग भी कर सकते हैं:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
या आपके वर्तमान जावा ईई एप्लिकेशन सर्वर के अनुसार कोई अन्य रणनीति।