Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate事务管理_Java_Hibernate_Session_Transactions_Multiple Instances - Fatal编程技术网

Java 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;

嗯,我从不久前就开始使用hibernate,所以我还在学习东西。 我的问题是,我不想在一个方法中打开和关闭事务,我的意思是,管理该事务的类,我希望它作为发票系统工作,例如,您打开发票并开始添加发票详细信息,但在我添加最后一个发票详细信息之前,不要提交任何工作

我展示了我所拥有的:

处理程序类:

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事务的情况下,还有其他方法可以做同样的事情吗?