Falls Sie Container-verwaltete Transaktionen dann müssen Sie auch die Transaktionsrichtlinie hinzufügen:
@Stateful
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=REQUIRED)
Ich habe dieses Phänomen nur in zwei Situationen gesehen:
- die
DataSource
läuft im Auto-Commit-Modus, daher wird jede Anweisung in einer separaten Transaktion ausgeführt - der
EntityManager
wurde nicht mit@Transactional
konfiguriert , aber dann können nur Abfragen ausgeführt werden, da jede DML-Operation am Ende eine Transaktionsanforderungsausnahme auslösen würde.
Fassen wir zusammen, dass Sie die folgenden Hibernate-Eigenschaften festgelegt haben:
hibernate.current_session_context_class=JTA
transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
jta.UserTransaction=java:comp/UserTransaction
Wobei die endgültige Eigenschaft mit Ihrem Anwendungsserver-UserTransaction-JNDI-Namensschlüssel festgelegt werden muss.
Sie können auch Folgendes verwenden:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup
oder eine andere Strategie gemäß Ihrem aktuellen Java EE-Anwendungsserver.