openSession:當調用SessionFactory的openSession方法時,它老是建立一個徹底全新的session給你.你須要顯示的刷新而且關閉session對象.由於session對象不是線程安全的,在多線程環境中你須要爲每個請求建立一個session對象(例如web應用的每個請求). java
Session session = P2MServiceLocator.getSessionFactory().openSession(); Transaction ts = session.beginTransaction(); for (int i = 1; i <= list.size(); i++) { session.save(list.get(i - 1)); if ((i % list.size()) == 0) { // 批次向數據庫中提交,此值應與配置的批量尺寸一致 session.flush(); // 清空緩存區,釋放內存供下批數據使用 session.clear(); } } ts.commit(); session.close();
getCurrentSession: 當調用SessionFactory的getCurrentSession方法時,它會返回Hibernate上下文中的Session,而且有hibernate管理.它綁定到事物範圍.若是不存在他會建立一個新的Session對象,若是在當前的hibernate上下文中存在,則返回一樣的Session對象.它會自動地flush和close,當事物結束的時候,因此無需多餘處理.若是你在單線程環境下使用hibernate,你應該用getCurrentSession,它的性能比較好web
P2MServiceLocator.getSessionFactory().getCurrentSession() .createSQLQuery(sb.toString()) .addEntity(NewEnumAttribute.class) .list()