Java EntityManager事务中断,如何找到导致它的SQL?

时间:2019-07-19 12:44:50

标签: java transactions entitymanager

我有一个EntityManager和JobDAO类,该类具有许多使用EntityManager选择/更新/删除/插入的方法。

对于某些方法,我现在得到一个javax.persistence.TransactionRequiredExceptionExecuting an update/delete query .. 关于没有交易。

我在调用其他方法的方法上有一个@Transactional注释。

我现在通过对某些命令使用自己的数据库连接对其进行了某种程度的修复,但我想找到导致问题的SQL。

我的一个想法是将事务检查器方法调用添加到20个可疑方法的每个方法的末尾。但是我想知道您是否有一个更好的主意来检查EntityManager,例如通过记录所有SQL,以便我可以找到最后一个停止工作的SQL。

1 个答案:

答案 0 :(得分:1)

请参见SO上的this post,以将ORM提供程序(例如Hibernate等)配置为记录sql How to view the SQL queries issued by JPA?

此外,您可以以编程方式询问EntityManager当前是否在事务中,请参见isJoinedToTransaction()

还...,请确保带有@Transactional批注的方法的类是Spring Bean,否则批注不执行任何操作。

此外,您还必须告诉Spring启用事务管理。这篇文章将帮助您了解如何执行此操作:https://www.baeldung.com/transaction-configuration-with-jpa-and-spring