com*_*tta 8 java spring hibernate transactions
我有一个场景服务层是事务性的,我只能在完成trandaction之后提交.我把它简化成如下所示.
begin transaction
for(loop){
getHibernateTemplate().save(object);
getHibernateTemplate().get(object_by_key); //cannot get object by object_by_key because "object" is not commit into database until entire for(loop) completed.
}
end transaction. commit();
Run Code Online (Sandbox Code Playgroud)
我尝试在save()之后放入getHibernateTemplate().flush()并且能够在show_sql中看到"insert".但记录未显示在数据库内部.如何在每次save()之后强制写入数据库,而不是像上面那样等待提交?
getHibernateTemplate().flush()是强制hibernate写入数据库的方法(发送插入和更新查询).这是在事务中完成的,因此在提交事务之前,其他事务(从SQL客户端查询)不可见.
如果插入查询显示在日志中,则它已发送到数据库.如果你想测试记录是否正确插入 - 你可以做一个getHibernateTemplate().clear()(它将删除所有缓存的数据),然后做一个getHibernateTemplate.get()(它将从dataSource查询) .或者另一种测试方法是使用jdbcTemplate(使用相同的数据库)进行查询和检查.
如果您使用的是SQL客户端工具允许您指定的隔离级别 - 开始在read_uncommited隔离SQL客户端会话 - 将让你看到交易将提交之前也做了改变.
归档时间: |
|
查看次数: |
16777 次 |
最近记录: |