sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo ejecutar consultas SQL nativas en la misma transacción de Hibernate?

En caso de que no utilice transacciones administradas por contenedor entonces también debe agregar la política de transacciones:

@Stateful
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=REQUIRED)

Solo he visto este fenómeno en dos situaciones:

  • la DataSource se ejecuta en modo de confirmación automática, por lo tanto, cada declaración se ejecuta en una transacción separada
  • el EntityManager no se configuró con @Transactional , pero solo se pueden ejecutar consultas, ya que cualquier operación DML terminaría generando una excepción de transacción requerida.

Recapitulemos que ha configurado las siguientes propiedades de Hibernate:

hibernate.current_session_context_class=JTA
transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
jta.UserTransaction=java:comp/UserTransaction

Donde la propiedad final debe establecerse con la clave de nomenclatura JNDI de UserTransaction del servidor de aplicaciones.

También puede usar:

hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup

o alguna otra estrategia de acuerdo con su servidor de aplicaciones Java EE actual.