框架之事务----自动更新数据库的问题
2017-02-27 11:18
134 查看
最近在工作的时候,需要对数据库中的某些数据做导出报表的功能。由于之前有写好的方法,所以主体使用的此方法。在使用方法的过程中发现需要对数据库中的数据不同比照码表去改变报表中的数据格式。比如数据库中的1代表证件类型的身份证,0代表证件类型的其他。当时是在service层对Dao返回的数据集合做处理,然后返回一个改变后的数据集合给controller。但是发现在导出的时候,会因为Dao层返回的数据集合中信息的改变而造成数据库的更新,更新目标就是更改后的DAO返回集合。
项目中在service层方法上通过注解的方法开启事务,如下:@Transactional(propagation = Propagation.REQUIRED, readOnly = false)。后发现问题就是出在这个地方,hibernate事务在提交的时候会自动的对DAO返回进行类似"比对"的操作,发现有不同的话会随事务提交,从而造成数据的篡改。
解决本问题有两种办法,一种是在service层即事务控制范围内操作的时候,复制一个新的对象去替换他,通过新对象的属性判断原有对象的值。例如本系统中的导出报表:
第二种办法就更简单了,即把需要对DAO返回的数据集合做改变处理的操作放在事务控制范围之外的controller层
项目中在service层方法上通过注解的方法开启事务,如下:@Transactional(propagation = Propagation.REQUIRED, readOnly = false)。后发现问题就是出在这个地方,hibernate事务在提交的时候会自动的对DAO返回进行类似"比对"的操作,发现有不同的话会随事务提交,从而造成数据的篡改。
解决本问题有两种办法,一种是在service层即事务控制范围内操作的时候,复制一个新的对象去替换他,通过新对象的属性判断原有对象的值。例如本系统中的导出报表:
第二种办法就更简单了,即把需要对DAO返回的数据集合做改变处理的操作放在事务控制范围之外的controller层
相关文章推荐
- 启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题 分类: .NET 2015-06-18 14:39 31人阅读 评论(0) 收藏
- 启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题
- 开启事务后hibernate缓存自动更新数据到数据库?
- 启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题
- greenDao android开源框架数据库更新表的问题
- 启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题
- 启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题
- 启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题
- FMDB性能优化问题。使用FMDB事务批量更新数据库速度问题。(亲测可以呀---740条数据用和不用事务效率差别20倍+)
- 启用事务操作,解决批量插入或更新sqlite,mssql等数据库耗时问题
- ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard
- NHibernate问题 flush-mode 一个事务中重复提交更新的SQL语句
- 根据数据库自动生成INSERT/UPDATE更新语句
- 用Sql解决数据库并发更新问题
- 一个数据库批量处理中的事务问题
- 转:自动记录数据库存储过程的更新和改变,并产生日志
- 遇到几个问题:1.昨天还能连上数据库,今天不能;2.mysql服务自动停止
- 将DataSet更新自动提交到数据库工具类实现(转)
- 自动记录数据库存储过程的更新和改变,并产生日志
- 将DataSet更新自动提交到数据库工具类实现