gpt4 book ai didi

java - Spring Boot 使用@Transactional 注解的方法,调用其他事务性方法并抛出异常

转载 作者:行者123 更新时间:2023-11-30 05:21:47 28 4
gpt4 key购买 nike

我正在尝试在 @Transactional 带注释的方法中处理记录。在处理其他一些次要(但必要的)业务逻辑之前,必须注意其他方法的一些依赖关系。主记录似乎在事务中保存没有问题,但是当我尝试使用其他服务清理某些数据时,它会抛出 JpaEntityNotFoundException

我在导致问题的方法中使用了Propagation.REQUIRES_NEW,但没有成功。有谁知道我错过了什么或做错了什么?在执行其余事务操作之前,我不得提交主记录。

我得到的异常是:org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find com.myproject.repository.entity.Book with id 5851445;嵌套异常是 javax.persistence.EntityNotFoundException: 无法找到 id 为 5851445 的 com.myproject.repository.entity.Book.........................

这是一个以某种方式显示我的问题的示例:

ServiceA 类

@Service
public class ServiceA {


public void nonTransactionalMethodA(Book book) {

//..... Any independent logic from ServiceB

updateAuthor(book);

nonTransactionalMethodB();
}

public void nonTransactionalMethodB() {
//post process logic ......
}

}

ServiceB 类

  @Service
public class ServiceB {

@Autowired
private BookRepository bookRepository;

@Autowired
private OfferRepository offerRepository;

@Transactional
private void updateAuthor(Author author) {
Book book = new Book(1);
book.setAuthor(author);
bookRepository.save(book);
removeUnavailableOffers(book);
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void removeUnavailableOffers (Book book) {
/*throwing org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find com.myproject.repository.entity.Book with id 5851445; nested exception is javax.persistence.EntityNotFoundException: Unable to find com.myproject.repository.entity.Book with id 5851445............*/
offerRepository.deleteByBookIdIsNullAndBookAuthorIdNot(book.authorId);
}
}

对此的任何想法都将不胜感激。

最佳答案

确保用 @Transactional 注解的方法声明为 public 并由不同的类调用。

事务方法必须是公共(public)的,以便 Spring 可以覆盖它,并且必须从定义类的外部调用它,以便调用可以通过代理。

这是使用 @Transactional 时的常见陷阱之一,有关详细信息,请参阅 https://codete.com/blog/5-common-spring-transactional-pitfalls/

关于java - Spring Boot 使用@Transactional 注解的方法,调用其他事务性方法并抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59459819/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com