分享

Hibernate 中getSession().save() 保存不到数据库 解决办法

 菜鸟之舞 2012-04-10

背景:
普通的java项目,单独添加hibernate框架,不添加其他任何框架的情况下。

分析:
没有使用事务管理模式,myEclipse的反向工程生成的dao的save方法

  1. public void save(Cigarette transientInstance) {
  2. log.debug(“saving Cigarette instance”);
  3. try {
  4. getSession().save(transientInstance);
  5. log.debug(“save successful”);
  6. } catch (RuntimeException re) {
  7. log.error(“save failed”, re);
  8. throw re;
  9. }


}
并不能说这个没有添加事务管理模式,只不过这么写他有的时候灵有的时侯不灵,那我们改为显示的提交事务就成了!

  1. public void save(Cigarette transientInstance) {
  2. log.debug(“saving Cigarette instance”);
  3. Transaction transaction= getSession().beginTransaction();
  4. try {
  5. getSession().save(transientInstance);
  6. log.debug(“save successful”);
  7. } catch (RuntimeException re) {
  8. log.error(“save failed”, re);
  9. throw re;
  10. }
  11. transaction.commit();
  12. getSession().flush();
  13. getSession().close();
  14. }



结论:
hibernate成功执行sava且不报错后,数据库中没有数据的原因:hibernate 必须显示的声明提交事务

JDBC默认的是自动提交
Hibernian默认的是手动提交,必须开启事务,手动提交,否则数据库中没有保存的记录:
Transaction transaction= getSession().beginTransaction();
getSession().save(transientInstance);
transaction.commit();

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多