原来是希望第一次保存的时候获取到id,然后根据id生成一个内部编码,再回写回数据库。但是要在一个事务里完成。

结果报错了,提示:
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)

各位给点建议

findone之后要更新对象的值才可以否则乐观锁会认为是执行了2次 所以报错。是说要用EntityManagerrefresh一下吗看代码怎么写的

save方法他本身就会做判断,jpa里面是没有update方法的,,若实体中存在id,他会到数据库中看是否存在,存在则修改,不存在则添加,修改的时候需要对version进行处理,否则会报错,

//修改之前先查询数据库中最新的数据

Objectold=objDao.findOne(id);

BeanUtils.copyProperties(要修改的对象,old,newString[]{"version"});

objDao.save(<spanstyle="font-size:13.3333330154419px;">old);

这话的意思是将你要修改的对象的属性复制到数据库中最新的那个对象里,但是version不复制,那么version就是最新的,你也可以将version设置到你的要保存的对象中


不是你说的这个问题,我是save以后,再重新findOne,再对findOne返回的对象进行修改,再save依然有问题这个是合理的啊  同一个对象保存两次???是什么道理  把id转换成一个字符串,需要先insert进数据库才有id第一次用saveAndFlush试下?最后放弃使用@Version了,就没问题了jpa要用merge,persistent之类的吧!springdatajpa的CrudRepository.save已经替你实现了merge和persist

表示不用version 也有这样的问题。线程保存1个实体,触发器监听插入操作,也保存同一个实体到另外的表。然后就报错了 org.springframework.orm.ObjectOptimisticLockingFailureException:Batchupdatereturnedunexpectedrowcountfromupdate[0];actualrowcount:0;expected:1;nestedexceptionisorg.hibernate.StaleStateException:Batchupdatereturnedunexpectedrowcountfromupdate[0];actualrowcount:0;expected:1

2020-06-12 15:20:43 企业邮箱发送邮件时,若出现投递失败产生退信,内容提示包含如下: the mta server of * reply:550 failed to meet SPF requirements 或者 the mta server of 163.com — 163mx01.mxmail.netease.com(220.181.14.141) reply:550 MI:SPF mx14,QMCowECpA0qTiftVaeB3Cg—.872S2 1442548128 http://mail.163.com/help 302346 Android 车载应用开发与分析 (3)- 构建 MVVM 架构(Java版) Android 车载应用开发与分析 (4)- 编写基于AIDL 的 SDK Android 车载应用开发与分析(5) - CarLauncher RE: 从零开始的车载Android HMI(二) - Widget Android 车载应用开发与分析(12) - SystemUI (一)