天天看點

Hibernate 中getSession().save() 儲存不到資料庫 解決辦法

背景:

 普通的java項目,單獨添加hibernate架構,不添加其他任何架構的情況下。

分析:

 沒有使用事務管理模式,myEclipse的反向工程生成的dao的save方法

public void save(Cigarette transientInstance) {
 log.debug(“saving Cigarette instance”);
 try {
 getSession().save(transientInstance);
 log.debug(“save successful”);
 } catch (RuntimeException re) {
 log.error(“save failed”, re);
 throw re;
 }
           

 }

 并不能說這個沒有添加事務管理模式,隻不過這麼寫他有的時候靈有的時侯不靈,那我們改為顯示的送出事務就成了!

public void save(Cigarette transientInstance) {
 log.debug(“saving Cigarette instance”);
 Transaction transaction= getSession().beginTransaction();
 try {
 getSession().save(transientInstance);
 log.debug(“save successful”);
 } catch (RuntimeException re) {
 log.error(“save failed”, re);
 throw re;
 }
 transaction.commit();
 getSession().flush();
 getSession().close();
 }
           

結論:

 hibernate成功執行sava且不報錯後,資料庫中沒有資料的原因:hibernate 必須顯示的聲明送出事務

JDBC預設的是自動送出

 Hibernian預設的是手動送出,必須開啟事務,手動送出,否則資料庫中沒有儲存的記錄:

 Transaction transaction= getSession().beginTransaction();

 getSession().save(transientInstance);

 transaction.commit();