Jika Anda tidak menggunakan transaksi terkelola container maka Anda perlu menambahkan kebijakan transaksi juga:
@Stateful
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=REQUIRED)
Saya hanya melihat fenomena ini dalam dua situasi:
DataSource
sedang berjalan dalam mode komit otomatis, maka setiap pernyataan dieksekusi dalam transaksi terpisahEntityManager
tidak dikonfigurasi dengan@Transactional
, tetapi hanya kueri yang dapat dijalankan karena operasi DML apa pun pada akhirnya akan menimbulkan pengecualian yang diperlukan transaksi.
Mari kita rekap Anda telah mengatur properti Hibernate berikut:
hibernate.current_session_context_class=JTA
transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
jta.UserTransaction=java:comp/UserTransaction
Di mana properti final harus disetel dengan kunci penamaan JNDI UserTransaction Server Aplikasi Anda.
Anda juga dapat menggunakan:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
atau beberapa strategi lain sesuai dengan Server Aplikasi Java EE Anda saat ini.