我有一个代码,用于手动完成事务控制, 但是代码调用同一应用程序的其他EJB的方法,其中事务不是手动控制的,例如,有些方法使用由Container管理的Hibernate Session。
如果存在使用例如Session.createCriteria的查询方法,如何防止我的手动管理的事务下载提交。
发生这种情况时,我的事务会在我的进程实际完成之前卸载提交。
示例
private void exe() throws Exception {
@EJB Businessbusiness;
this.beginTransaction();
business.processar(); // Exemplo
this.commit();
}
@Stateless
public class Business() {
@EJB
private DAO dao;
private void processar() throws Exception {
// executando processo 1
this.save();
// executando processo 2
this.update();
// Saving and updating has not yet been committed. So far it is correct.
Teste = dao.buscarTeste(1L);
// Here, after performing the search, my transaction downloads the commit to the bank without completing the whole process.
}
}
@Stateless
public class DAO() {
public Teste buscarTeste(Long codigo) {
Criteria cri = getSession().createCriteria(Teste.class);
cri.add(Restrictions.eq("codigo", codigo));
return (Teste) cri.uniqueResult();
}
}
答案 0 :(得分:0)
我不确定我是否真的明白你的观点。
但假设您没有收到任何错误,当您调用Business.processar()
方法时,它会继承该事务。在exe客户端提交之前,它仍处于“待定”状态。
所以,我会调查你的getSession()
中间做了什么,我很确定它会启动一个全新的交易,它会检索未提交的数据。
顺便说一句,是否有理由使用hibernate代替JPA和hibernate作为具体实现?