Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como executar consultas SQL nativas na mesma transação do Hibernate?


Caso você não use transações gerenciadas por contêiner então você precisa adicionar a política de transação também:
@Stateful
@TransactionManagement(value=TransactionManagementType.CONTAINER)
@TransactionAttribute(value=REQUIRED)

Eu só vi esse fenômeno em duas situações:
  • a DataSource está sendo executado no modo de confirmação automática, portanto, cada instrução é executada em uma transação separada
  • o EntityManager não foi configurado com @Transactional , mas apenas consultas podem ser executadas, pois qualquer operação DML acabaria lançando uma exceção de transação obrigatória.

Vamos recapitular que você definiu as seguintes propriedades do Hibernate:
hibernate.current_session_context_class=JTA
transaction.factory_class=org.hibernate.transaction.JTATransactionFactory
jta.UserTransaction=java:comp/UserTransaction

Em que a propriedade final deve ser configurada com sua chave de nomenclatura JNDI UserTransaction do Application Server.

Você também pode usar o:
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup

ou alguma outra estratégia de acordo com seu servidor de aplicativos Java EE atual.