gpt4 book ai didi

java - 如何在后端线程中使用 JpaRepository?

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:08 25 4
gpt4 key购买 nike

我有一个界面如下:

public interface PackageRepository extends JpaRepository<DocPackage, String> {
}

现在我可以通过以下方式在我的 REST 服务中毫无问题地使用它:

@Resource
PackageRepository repo;

我可以毫无问题地对其进行事务调用。

但是,当我尝试从工作线程加载它时:

public class MyWorker implements Runnable {
@Resource
PackageRepository repo;

@Transactional
private void doSomething() {
DocPackage pck = repo.findOne("key");
pck.setStatus(2);
repo.saveAndFlush(pck);
}

public void run() {
//stuff
doSomething();
//other stuff
}
}

new Thread(new MyWorker()).start();

我能够很好地读取这个 repo,但是每当我保存和刷新时,我都会得到异常:

javax.persistence.TransactionRequiredException: no transaction is in progress

有什么办法可以正确完成这项工作吗?

最佳答案

Spring 默认使用代理。这意味着 @Transaction 仅在从类外部调用方法时才起作用。

要修复它,请将您的方法提取到服务中。在 MyWorker 中注入(inject)您的服务并调用它。

关于java - 如何在后端线程中使用 JpaRepository?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36554367/

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