了解SessionFactory和Hibernate会话

时间:2014-04-28 21:00:22

标签: java hibernate session

我正在学习Hibernate,我需要帮助来了解Sessions的工作原理。我在下面给出了一个类中的一些方法。

我看到getCurrentSession()课程中有一个SessionFactory。因此,似乎Session内只有一个SessionFactory可以“有效”。这是SessionFactory吗? 事务队列按顺序完成事务?如果是,那么 是否有可能将交易提升到更高或更低的优先级?

private static SessionFactory factory;  

//Get a hibernate session.
public static Session getSession(){
    if(factory == null){

        Configuration config = HibernateUtil.getConfiguration();
        factory = config.buildSessionFactory();

    }   
    Session hibernateSession = factory.getCurrentSession();
    return hibernateSession;
}

public static void commitTransaction(){
    HibernateUtil.getSession().getTransaction().commit();
}

public static void rollbackTransaction(){       
    HibernateUtil.getSession().getTransaction().rollback();
}

还有一些使用getTransaction()的方法。

1 个答案:

答案 0 :(得分:6)

SessionFactory的工作是隐藏会话创建策略。例如,在Web应用程序中,您可能希望SessionFactory在线程上第一次调用Session时返回创建getCurrentSession(),然后返回相同的Session从那时起,请求的持续时间。 (由于您可能希望从该会话加载客户数据,然后可能会在同一会话中修改其帐户。)其他时候,您可能希望SessionFactory每次拨打getCurrentSession()时都创建一个全新的会话。因此,通过将此决定隐藏在SessionFactory API后面,您只需编写从工厂获取Session并对其进行操作的代码。

Session处理交易。正如您可能预期的那样,事务以Session开始,然后完成或回滚。实际上没有办法确定它们的优先级,因为一旦启动它们,您就会致力于回滚或提交它们。