背景:
普通的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();