【问题记录】mybatis开启事务方法时,一级缓存可能引发的问题
2024-10-22 07:49:48
首先,上代码:
public void listMybatisModel() {
List<MybatisModel> mybatisModels = mapper.listMybatisModel();
List<MybatisModel> mybatisModelsOther = mapper.listMybatisModel();
System.out.println(mybatisModels == mybatisModelsOther);
System.out.println("list count: " + mybatisModels.size());
}
listMybatisModel
是使用springAOP控制的事务方法,方法中:
System.out.println(mybatisModels == mybatisModelsOther);
输出竟然是true
!也就是说,它们使用的是同一个内存地址。所以我们可以想象这种情况:
public void listMybatisModel() {
List<MybatisModel> mybatisModels = mapper.listMybatisModel();
// 对mybatisModels的值进行改变
// ...
// 那么mybatisModelsOther的值也会跟着改变,而不是取到正确的数据库的值,造成数据错误
List<MybatisModel> mybatisModelsOther = mapper.listMybatisModel();
System.out.println(mybatisModels == mybatisModelsOther);
System.out.println("list count: " + mybatisModels.size());
}
解决办法:在Sql映射文件标签中加入属性 flushCache="true"
<select ... flushCache="true" >
最新文章
- 自用的基于Emit的C#下DataTable转实体类方法
- 1 为什么搭建.Net core下的云开发框架
- eclipse SE增加Web开发插件;安装配置Apache
- JAVA经典算法40题(供面试所用)
- 比较常用的几个maven第三方镜像
- Thinkphp源码分析系列(二)–引导类
- 解决ubuntu sudo not found command的问题
- Java中的注解是如何工作的?--annotation学习一
- HDU 5120 Intersection(几何模板题)
- jquery Deferred使用经验
- 并查集专辑 (poj1182食物链,hdu3038, poj1733, poj1984, zoj3261)
- Jmeter3.2源码编译环境搭建
- Nacos发布0.5.0版本,轻松玩转动态 DNS 服务
- (转)GANs and Divergence Minimization
- [算法专题] BST&;AVL&;RB-Tree
- mysql——创建索引、修改索引、删除索引的命令语句
- DDD领域驱动设计(例子)
- 微软BI 之SSRS 系列 - 使用 LookupSet 和 Adjacent Group 等高级技巧在报表中跨 Dataset 分组查询
- idea安装插件
- 转)Ubuntu安装mysql5.7
热门文章
- 一.RocketMQ消息中间件 windwos使用
- 三分钟教你学Git(十八) - 重写历史
- Ubuntu - 硬盘分区、格式化、自动挂载配置
- C语言i++和++i的区别和指针*(a++)和*(++a)的区别
- (转)IntelliJ IDEA下的使用git
- eclipse缺省的Server没有weblogic
- java泛型介绍
- [读后感]Java 控制台执行 Jar 传參的编码问题
- 常见Style 对象属性值
- maven modules