博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring data JPA日常开发问题
阅读量:2446 次
发布时间:2019-05-10

本文共 1147 字,大约阅读时间需要 3 分钟。

用户登陆后更改token时每次会新增一条数据

首先看我的配置,在repostory中继承自

extends JpaRepository<AcountEntity, Long>,JpaSpecificationExecutor<AcountEntity> 

我在service执行saveAndFlush时总是执行新增操作

我最开始以为是游离对象导致的,可根据我以前的经验不管是游离对象还是事务中对象如果遇到save操作都是执行merge

所以我把findByUserNameAndPassword查出一遍后再通过findOne再查找一遍还是新增

解决办法

我通过在SimpleJpaRepostory中打断点了解了它的执行原理

首先SimpleJpaRepostory继承了JpaRepostory,就有了一系列CURD功能

通过this.save()

if(this.entityInformation.isNew(entity)) {    this.em.persist(entity);    return entity;} else {    return this.em.merge(entity);}
我们再看entityInfomation.isNew()方法

if(this.versionAttribute != null && !this.versionAttribute.getJavaType().isPrimitive()) {    DirectFieldAccessFallbackBeanWrapper wrapper = new DirectFieldAccessFallbackBeanWrapper(entity);    Object versionValue = wrapper.getPropertyValue(this.versionAttribute.getName());    return versionValue == null;} else {    return super.isNew(entity);}

有三个方法,我都打了断点,发现走的是第二个实现类

JpaMetamodelEntityInformation

this.versionAttribute != null && !this.versionAttribute.getJavaType().isPrimitive()

通过字段得知version不能为null,在version字段更改后就再也没有新增过了

这也是因为手动添加数据的原因导致的,稍后我需要了解为什么修改要依靠version 我当时以为架构师是因为乐观锁原因而新增的,如果有知道的朋友可以留言哦 ! 谢谢

转载地址:http://wmaqb.baihongyu.com/

你可能感兴趣的文章
使用云waf的案例_9种流行的云使用案例
查看>>
类集合转换类集合_PHP中的集合类
查看>>
使用SimplePie消费Feed
查看>>
运算符二进制_基本转换和二进制运算符
查看>>
SitePoint播客#121:在线社区圆桌会议第2部分
查看>>
pchart_用pChart绘制图表
查看>>
Git简介,第1部分
查看>>
微信 获取地理位置名称_使用地理名称的目标地理位置
查看>>
graph api_与Facebook Graph API集成
查看>>
本地应用程序_本地化PHP应用程序的“正确方法”,第4部分
查看>>
SitePoint播客#80:与澳大利亚团队的FullCodePress
查看>>
用Wufoo创建简单表单:开发人员的观点
查看>>
heroku_使用Heroku和Facebook SDK在云中构建您的应用
查看>>
将ip保存在txt文档中_将任何文件存储在Google文档中
查看>>
disconf apps_Google Apps Drop IE6支持
查看>>
使用Screenr创建截屏视频
查看>>
互联网总线带宽_新技术将使互联网带宽翻倍
查看>>
java自由职业者是什么_一个成功的自由职业者需要什么?
查看>>
java语言作为入门好吗_Java作为学生的第一语言
查看>>
sql内联接外联接三张表_在SQL中联接三个或更多表
查看>>