Jeśli nie używasz transakcji zarządzanych kontenerami następnie musisz dodać również zasady transakcji:
@Stateful
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=REQUIRED)
Widziałem to zjawisko tylko w dwóch sytuacjach:
DataSource
działa w trybie automatycznego zatwierdzania, dlatego każda instrukcja jest wykonywana w osobnej transakcjiEntityManager
nie został skonfigurowany z@Transactional
, ale wtedy można uruchamiać tylko zapytania, ponieważ każda operacja DML zakończyłaby się zgłoszeniem wyjątku wymaganego przez transakcję.
Przypomnijmy, że ustawiłeś następujące właściwości hibernacji:
hibernate.current_session_context_class=JTA
transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
jta.UserTransaction=java:comp/UserTransaction
Gdzie ostateczna właściwość musi być ustawiona za pomocą klucza nazewnictwa JNDI UserTransaction serwera aplikacji.
Możesz również użyć:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
lub jakaś inna strategia zgodnie z aktualnym serwerem aplikacji Java EE.