hibernate Transaction

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

public void save(Cigarette transientInstance) {

log.debug(“savingCigaretteinstance”);

try{

getSession().save(transientInstance);

log.debug(“savesuccessful”);

}catch(RuntimeExceptionre){

log.error(“savefailed”,re);

throwre;

}

}?

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

public void save(Cigarette transientInstance) {

log.debug(“savingCigaretteinstance”);

Transactiontransaction=getSession().beginTransaction();

try{

getSession().save(transientInstance);

log.debug(“savesuccessful”);

}catch(RuntimeExceptionre){

log.error(“savefailed”,re);

throwre;

}

transaction.commit();

getSession().flush();

getSession().close();

}

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

JDBC默认的是自动提交

Hibernian默认的是手动提交,必须开启事务,手动提交,否则数据库中没有保存的记录:

Transactiontransaction=getSession().beginTransaction();

getSession().save(transientInstance);

transaction.commit();

相关推荐