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();

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值