如果我要将几个DAO注入需要在单个事务中协同工作的服务,我该怎么做?
@Component
public class CallerClass{
@Autowired
private TransactionClass1 class1;
@Autowired
private TransactionClass2 class2;
public void saveOperation(){
try{
class1.save();
class2.save();
}catch(Exception ex){
}
}
}
像上面的简单代码一样。但是,此代码缺乏
答案 0 :(得分:3)
您只需以与通常相同的方式注入所有DAO,即使用@Inject或@Autowired设置或构造函数。
然后,您将服务方法注释为Transactional,并在多个DAO上调用所需的操作。该交易将包含其中的所有dao调用。
@Transactional
public void doStuff() {
dao1.doStuff();
dao2.doStuff();
}
答案 1 :(得分:1)
您必须在使用第一个dao之前打开该事务(例如使用@Transactional
)。
public class MyService{
@Inject
Dao1 dao1;
@Inject
Dao2 dao2;
@Transactional
public doStuffInOneTransaction{
Object x = dao1.load();
Object y = doSomething(x);
dao2.save(y);
}
}
答案 2 :(得分:0)
你使用JTA吗?您是自己实施交易吗?请提供有关您的架构的更多信息,以便我们做出相应的回应。
编辑: 检查一下,例如: http://community.jboss.org/wiki/OpenSessionInView