Java EntityManager事务被破坏,如何定位导致它的SQL?

标签 java transactions entitymanager

我有一个 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/

相关文章:

hibernate - 如何将动态 @PersistenceContext 与 Hibernate 和 JBoss AS 7 连接池一起使用

java - 实体管理器在 JavaFX 中不起作用

java - 无状态 session bean 在缺少 EntityManager 的上下文中调用

java - 如果在线程中 InterruptedException 的 catch block 内使用 "return",它会在哪里返回?

Java 和队列 : saturation issues with multithreaded I/O

java - 保存实体时避免重复键错误

java - 类似于 Golang 中 Spring Data JPA 的框架

mysql - 并发连接中的InnoDB事务隔离级别

hibernate - org.hibernate.HibernateException : Could not obtain transaction-synchronized Session for current thread

mysql - Innodb 事务或表锁?