Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie werden native SQL-Abfragen in derselben Hibernate-Transaktion ausgeführt?

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.