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

2024-03-06

我有一个界面如下:

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();

我可以很好地读取这个存储库,但是每当我保存并刷新时,我都会遇到异常:

javax.persistence.TransactionRequiredException: no transaction is in progress

有什么方法可以正确完成此操作吗?


Spring默认使用代理。这个意思@Transaction仅当从类外部调用方法时才有效。

要修复它,请提取您的服务方法。将您的服务注入MyWorker并调用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在后端线程中使用 JpaRepository? 的相关文章

随机推荐