我有一个 EntityManager 和一个 JobDAO 类,其中有许多使用 EntityManager 来选择/更新/删除/插入的方法。
对于某些方法,我现在收到javax.persistence.TransactionRequiredException
:执行更新/删除查询..
关于没有交易。
我在调用其他方法的方法上有一个 @Transactional
注释。
我现在已经通过使用我自己的数据库连接来执行其中一些命令来稍微修复它,但我想找到导致问题的 SQL。
我的一个想法是在 20 个可疑方法的末尾添加一个事务检查器方法调用。但我想知道您是否有更好的主意来检查 EntityManager,例如通过记录所有 SQL,以便我可以找到它停止工作的最后一个 SQL。
最佳答案
参见this post用于配置 ORM 提供程序(例如 Hibernate 等)来记录 sql 的 SO: 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
关于Java EntityManager事务被破坏,如何定位导致它的SQL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57112781/