繁体   English   中英

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

[英]How do I use JpaRepository in a backend thread?

我有一个如下界面:

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注入您的服务并调用它。

我认为你需要在你的方法中添加@Transactional注释

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM