SessionFactory.close()和close(session)的区别

bear234 2013-08-24 11:22:55
用hibernate-struts-spring做东西

在做有关DAO的部分

创建了一个SessionFactory以创建若干个Session(SessionFactory.openSession())

使用Session需要关闭的时候

出现了题目中的问题

是应该session.close()呢 还是 SessionFactory.close()?

谢谢
...全文
287 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wind_elf 2013-08-25
  • 打赏
  • 举报
回复
SessionFactory是Session工厂,也就是一个SessionFactory可以在需要Session的时候就产出一个。当你不再需要SessionFactory的时候就可以调用HibernateDB里面的close()方法了。一般是不会调用的。
bear234 2013-08-25
  • 打赏
  • 举报
回复
public class HibernateDB { private SessionFactory sessionFactory = (new Configuration().configure()).buildSessionFactory(); public Session connect() { return this.sessionFactory.openSession(); } public void close() { this.sessionFactory.close(); } } public interface DAOClient{//save update etc...} public class DAOClientImpl extends HibernateDB implements DAOClient{ //具体实现save等方法 比如findAll public ArrayList<Client> findAll(){ Session session = connect(); //读取出数据库中相关数据 形成一个ArrayList //这里,上面的session用完了 所以应该session.close()???? //返回上面形成的ArrayList } } 那么 什么时候应该调用HibernateDB里面的close方法???
package hib; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.cfg.Configuration; /** * Configures and provides access to Hibernate sessions, tied to the * current thread of execution. Follows the Thread Local Session * pattern, see {@link http://hibernate.org/42.html }. */ public class HibernateSessionFactory { /** * Location of hibernate.cfg.xml file. * Location should be on the classpath as Hibernate uses * #resourceAsStream style lookup for its configuration file. * The default classpath location of the hibernate config file is * in the default package. Use #setConfigFile() to update * the location of the configuration file for the current session. */ private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); private static Configuration configuration = new Configuration(); private static org.hibernate.SessionFactory sessionFactory; private static String configFile = CONFIG_FILE_LOCATION; static { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } private HibernateSessionFactory() { } /** * Returns the ThreadLocal Session instance. Lazy initialize * the SessionFactory if needed. * * @return Session * @throws HibernateException */ public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) { if (sessionFactory == null) { rebuildSessionFactory(); } session = (sessionFactory != null) ? sessionFactory.openSession() : null; threadLocal.set(session); } return session; } /** * Rebuild hibernate session factory * */ public static void rebuildSessionFactory() { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } /** * Close the single hibernate session instance. * * @throws HibernateException */ public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } /** * return session factory * */ public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory; } /** * return session factory * * session factory will be rebuilded in the next call */ public static void setConfigFile(String configFile) { HibernateSessionFactory.configFile = configFile; sessionFactory = null; } /** * return hibernate configuration * */ public static Configuration getConfiguration() { return configuration; } }

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧