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.