我有一个界面如下:
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(使用前将#替换为@)