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