現象:程序執行正確,但數據庫沒有已經執行成功的插入數據
問題:Hibernate無法持久化數據到數據庫
解決:檢查一下兩個方面
1、不要多次new SessionFactory
SessionFactory是個工廠,要一個會話找工廠要一個,不必每次都新建工廠
session接口
一般的持久化方法(CRUD)都是通過Session來調用的,Session是非線程安全的。
Session是一個輕量級對象,通常將每個Session實例和一個數據庫事務綁定,也就是每執行一個數據庫事務,都應該先創建一個新的Session實例,在使用Session後,還需要關閉Session。
創建Session:Session session=sessionFactory.openSession();
關閉Session:session.close();
SessionFactory 接口
這裡用到了一個設計模式――工廠模式,用戶程序從工廠類SessionFactory中取得Session的實例。
SessionFactroy接口負責初始化Hibernate。它充當數據存儲源的代理,並負責創建Session對象。這裡用到了工廠模式。需要注意的是SessionFactory並不是輕量級的,因為一般情況下,一個項目通常只需要一個SessionFactory就夠,當需要操作多個數據庫時,可以為每個數據庫指定一個SessionFactory。
2、hibernate.cfg.xml中:hsqldb.write_delay=false
connection=DriverManager.getConnection("jdbc:hsqldb:file:feng;hsqldb.write_delay=false;","SA","");
使用該模式,無需斷開連接,當對數據進行修改後,很快會被持久化,但也正因為此,使用該配置性能稍差些。