了解SessionFactory和Hibernate会话

Bor*_*yev 3 java session hibernate

我正在学习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();
}
Run Code Online (Sandbox Code Playgroud)

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

mat*_*the 6

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

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

  • 这取决于如何配置`SessionFactory`.`SessionFactory`会给你'正确的'`Session`."正确"的含义取决于您的申请.正如`SessionFactory`的javadoc中所述:"获得当前会话.确定'当前'的含义的定义意味着由配置使用的CurrentSessionContext impl控制." 如果要验证它是否按照您的想法进行验证,请检查返回会话的哈希码以确保它是相同的会话. (2认同)
  • 可以在spring XML配置中配置SessionFactory.定义事务管理器时定义会话工厂,并确保所有事务都使用您配置的会话工厂. (2认同)
  • 查看我在之前评论中发布的文档链接中的`current_session_context_class`属性.希望有所帮助. (2认同)