Spring Jpa问题:InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread

通过Spring Data JPA调用deleteByXXX接口,报错:

org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:403) ~[spring-orm-5.3.10.jar:5.3.10]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:235) ~[spring-orm-5.3.10.jar:5.3.10]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:551) ~[spring-orm-5.3.10.jar:5.3.10]

Spring Data JPA内部的EntityManager的PersistenceContextType默认为TRANSACTION,即需要事务的作用域中执行。

解决方法:

  1. 在执行的方法上添加@Transactional。
  2. Spring基于AOP的代理实现@Transactional,对于添加@Transactional的方法需要是public。

 

版权声明:著作权归作者所有。

thumb_up 0 | star_outline 0 | textsms 0