背景:
普通的java項(xiàng)目,單獨(dú)添加hibernate框架,不添加其他任何框架的情況下。
分析:
沒有使用事務(wù)管理模式,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;
- }
}
并不能說這個(gè)沒有添加事務(wù)管理模式,只不過這么寫他有的時(shí)候靈有的時(shí)侯不靈,那我們改為顯示的提交事務(wù)就成了!
- 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();
- }
結(jié)論:
hibernate成功執(zhí)行sava且不報(bào)錯(cuò)后,數(shù)據(jù)庫中沒有數(shù)據(jù)的原因:hibernate 必須顯示的聲明提交事務(wù)
JDBC默認(rèn)的是自動(dòng)提交
Hibernian默認(rèn)的是手動(dòng)提交,必須開啟事務(wù),手動(dòng)提交,否則數(shù)據(jù)庫中沒有保存的記錄:
Transaction transaction= getSession().beginTransaction();
getSession().save(transientInstance);
transaction.commit();