postgresql循环取序列值相同,使用@Transactional注解

@Transactional注解下,postgresql循环取序列值相同
1、原有的语句:出现循环取序列值相同

<select id="queryProjectSeq" resultType="java.lang.Integer">
     select NEXTVAL('t_project_seq')
  </select>


2、问题原因:在同一事务下,mybatis缓存导致的!


3、解决方法:在 mapper.xml 添加属性 useCache=“false” flushCache=“true” 禁用mybatis缓存后之后便可以成功增长序列。

<select id="queryProjectSeq" resultType="java.lang.Integer"  useCache="false" flushCache="true">
     select NEXTVAL('t_project_seq')
  </select>


4、说明:
mybatis一级缓存默认开启,是sqlSession级别的缓存,在同一个sqlSession下,对相同条件的sql查询结果会进行缓存。
sqlSession调用flush或者close之后,会清理mybatis一级缓存;session内发生 insert、update 和 delete 操作时,会清空缓存;一个session内发生的insert、update 和 delete 操作,不会影响其他session内的一级缓存。
在spring集成mybatis时,如果不开启事务,spring对于每次查询会使用不同的sqlSession,因此mybatis一级缓存是不生效的(每次查询都是一个单独的事务); 如果开启事务,spring在事务内会使用同一个sqlSession进行查询,这个时候mybatis一级缓存是生效的,而这个时候,在某些场景下我们只根据隔离级别作出的判断可能就不对了,需要注意。


————————————————
原文链接:https://blog.csdn.net/weixin_45611545/article/details/109156338

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值