我正在学习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()
的方法。
答案 0 :(得分:6)
SessionFactory
的工作是隐藏会话创建策略。例如,在Web应用程序中,您可能希望SessionFactory
在线程上第一次调用Session
时返回创建getCurrentSession()
,然后返回相同的Session
从那时起,请求的持续时间。 (由于您可能希望从该会话加载客户数据,然后可能会在同一会话中修改其帐户。)其他时候,您可能希望SessionFactory
每次拨打getCurrentSession()
时都创建一个全新的会话。因此,通过将此决定隐藏在SessionFactory
API后面,您只需编写从工厂获取Session
并对其进行操作的代码。
Session
处理交易。正如您可能预期的那样,事务以Session
开始,然后完成或回滚。实际上没有办法确定它们的优先级,因为一旦启动它们,您就会致力于回滚或提交它们。