В случай, че не използвате транзакции, управлявани от контейнер след това трябва да добавите и политиката за транзакции:
@Stateful
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=REQUIRED)
Виждал съм това явление само в две ситуации:
DataSource
работи в режим на автоматично записване, следователно всеки израз се изпълнява в отделна транзакцияEntityManager
не е конфигуриран с@Transactional
, но тогава могат да се изпълняват само заявки, тъй като всяка DML операция в крайна сметка ще доведе до изключение, изискващо транзакция.
Нека обобщим, че сте задали следните свойства на хибернация:
hibernate.current_session_context_class=JTA
transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
jta.UserTransaction=java:comp/UserTransaction
Където крайното свойство трябва да бъде зададено с вашия Application Server UserTransaction JNDI ключ за именуване.
Можете също да използвате:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
или някаква друга стратегия според текущия ви сървър за приложения Java EE.