【发布时间】:2017-02-11 03:06:23
【问题描述】:
关于 Spring JPA 存储库事务性的 1 个快速问题。 我有一个未标记为事务性的服务并调用 Spring JPA 存储库方法
userRegistrationRepository.deleteByEmail(email);
它被定义为
@Repository
public interface UserRegistrationRepository extends JpaRepository<UserRegistration, Long> {
UserRegistration findByEmail(String email);
void deleteByEmail(String email);
}
问题在于它失败并显示“当前线程没有具有实际事务可用的 EntityManager - 无法可靠地处理 'remove' 调用;嵌套异常是 javax.persistence.TransactionRequiredException”异常。
好的,我可以通过将服务 or deleteByEmail(..) 方法标记为事务性来解决它,但我就是不明白为什么它现在崩溃了。 Spring 文档明确指出“存储库实例上的 CRUD 方法默认情况下是事务性的。”(http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#transactions),但显然这个不是......所以这个声明仅与 @987654324 的成员有关@?
ps:那是 Spring Data JPA 1.9.4
【问题讨论】:
标签: java jpa spring-data spring-transactions