2012-06-12 35 views
2

我正在爲我的應用程序使用Hibernate 3版本。Hibernate:我們到底需要關閉SessionFactory對象

在閱讀關於Hibernate的教程時,我發現SessionFactory應該只爲應用程序創建一次。 因此,爲此,我決定在類和靜態方法中使用靜態塊來返回它,如圖所示。

public class SessionFactoryInitiliaztion { 
    static { 
     try { 
      sessionFactory = new Configuration().configure().buildSessionFactory(); 
     } catch (Exception x) { 
      x.printStackTrace(); 
     } 
    } 

    public static SessionFactory getSessionFactory() { 
     return sessionFactory; 
    } 
} 

確切位置在哪裏,我需要關閉此sessionFactory對象,以便它轉售的記憶?

+0

您可利用Spring考慮。同時閱讀http://stackoverflow.com/questions/8724259/spring-hibernate-session-lifecycle關於使用Spring和Hibernate進行會話管理。 – JMelnik

+0

可能只要應用程序在退出時運行。可以參考http://stackoverflow.com/a/4544053/366964瞭解更多詳情。 –

+0

謝謝,但我沒有使用Spring的這個應用程序,它基於Servlets,JSP和Hibernate和MYSQL。 – Pawan

回答

4

我想不出任何理由(非正式)爲什麼你想關閉會話工廠,而你的應用程序存在,所以我不會太在意回收內存。當你的應用程序關閉時,我會關閉它。

+1

你誤解了我的問題,我想在應用程序存在時關閉它,所以我可以在servlet銷燬方法內部執行此操作,還是有任何適當的地方關閉Hibernate sessionFactory對象? 。 – Pawan

+0

對不起,是的,這是你應該關閉它,在銷燬() –

+0

非常感謝。 – Pawan

0

這似乎是一個錯誤,但有「過時」的配置SessionFactory的正確關閉:

Configuration configuration = new Configuration().configure(); 
    sessionFactory = configuration.buildSessionFactory();