Java Hibernate事务管理
嗯,我从不久前就开始使用hibernate,所以我还在学习东西。 我的问题是,我不想在一个方法中打开和关闭事务,我的意思是,管理该事务的类,我希望它作为发票系统工作,例如,您打开发票并开始添加发票详细信息,但在我添加最后一个发票详细信息之前,不要提交任何工作 我展示了我所拥有的: 处理程序类:Java Hibernate事务管理,java,hibernate,session,transactions,multiple-instances,Java,Hibernate,Session,Transactions,Multiple Instances,嗯,我从不久前就开始使用hibernate,所以我还在学习东西。 我的问题是,我不想在一个方法中打开和关闭事务,我的意思是,管理该事务的类,我希望它作为发票系统工作,例如,您打开发票并开始添加发票详细信息,但在我添加最后一个发票详细信息之前,不要提交任何工作 我展示了我所拥有的: 处理程序类: public class ModuloVenta { public Integer vender(Venta venta) { Integer idVenta = null;
public class ModuloVenta {
public Integer vender(Venta venta) {
Integer idVenta = null;
Transaction tx = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try {
tx = session.beginTransaction();
idVenta = (Integer) session.save(venta);
tx.commit();
} catch(HibernateException ex) {
if(tx!=null) tx.rollback();
ex.printStackTrace();
} finally {
session.close();
}
return idVenta;
}
public Integer agregarDetalle(DetalleVenta detalle) {
Integer idDetalle = null;
Transaction tx = null;
Session session = HibernateUtil.getSessionFactory().openSession();
try {
tx = session.beginTransaction();
idDetalle = (Integer) session.save(detalle);
tx.commit();
} catch(HibernateException ex) {
if(tx!=null) tx.rollback();
ex.printStackTrace();
} finally {
session.close();
}
return idDetalle;
}
}
方法vender和agregarDetalle是分开工作的,但是我希望它们首先使用方法vender打开,然后能够使用agregarDetalle,并在我调用某个方法之前使用它,例如,结束事务。
我该怎么做
谢谢 在vender方法中启动事务并将会话保持为实例级变量如何?可以使用新方法提交事务并关闭会话,例如,在完成所有操作后调用finish?要尝试吗。。谢谢但是有一个问题,像实例属性这样的会话对象安全吗?不安全。Hibernate会话不是线程安全的,所以如果要并发访问应用程序,不建议将其作为实例变量。我认为实现您的需求最简单的方法是使用spring事务-谢谢!在没有spring事务的情况下,还有其他方法可以做同样的事情吗?