java merge_java – OptimisticLockException当使用JPA merge()
我有一个休息的应用程序,其中一个资源可以更新.以下是负责实现此任务的两种方法:
> updateWithRelatedEntities(String,Store):接收通过反序列化PUT请求实体构造的id和新对象Store,在新对象上设置版本(用于乐观锁定),并在事务中调用更新.
public Store updateWithRelatedEntities(String id,Store newStore) {
Store existingStore = this.get(id);
newStore.setVersion(existingStore.getVersion());
em.getTransaction().begin();
newStore = super.update(id,newStore);
em.getTransaction().commit();
return newStore;
}
> update(String,T):进行更新的通用方法.检查ids匹配并执行合并操作.
public T update(String id,T newObj) {
if (newObj == null) {
throw new EmptyPayloadException(type.getSimpleName());
}
Type superclass = getClass().getGenericSuperclass();
if (superclass instanceof Class) {
superclass = ((Class) superclass).getGenericSuperclass();
}
Class type = (Class) (((ParameterizedType) superclass).getActualTypeArguments()[0]);
T obj = em.find(type,id);
if (!newObj.getId().equals(obj.getId())) {
throw new IdMismatchException(id,newObj.getId());
}
return em.merge(newObj);
}
问题是这个调用:T obj = em.find(type,id);触发数据库中存储对象的更新,这意味着我们在触发合并时获得OptimisticLockException(因为版本现在不同).
为什么会发生这种情况?实现这一点的正确方法是什么?
我不想将属性从newStore复制到existingStore,并使用existingStore进行合并 – 我认为这将解决乐观锁定问题.
此代码未在应用程序服务器上运行,并且我没有使用JTA.
编辑:
如果我在调用update之前分离existingStore,T obj = em.find(type,id);不会触发store对象的更新,这样可以解决问题.问题仍然存在 – 为什么当实体不分离时它会触发它?
java merge_java – OptimisticLockException当使用JPA merge()相关推荐
- java中的jpa_在JPA中处理Java的LocalDateTime
java中的jpa 几天前,我在处理JPA中的LocalDateTime属性时遇到问题. 在这篇博客文章中,我将尝试创建一个样本问题来说明该问题以及我使用的解决方案. 考虑以下实体,该实体为特定公司的 ...
- java jinq_将JINQ与JPA和H2一起使用
java jinq 几天前,我读了Iu Ming-Yee对JINQ的有趣采访 . 顾名思义,JINQ是一种尝试提供类似于LINQ for Java的尝试. 基本思想是缩小在关系数据模型上执行查询的面向 ...
- java中的jpa_JPA教程–在Java SE环境中设置JPA
java中的jpa JPA代表Java Persistence API,它基本上是一个规范,描述了一种将数据持久存储到持久存储(通常是数据库)中的方法. 我们可以将其视为类似于Hibernate之类的 ...
- JPA教程–在Java SE环境中设置JPA
JPA代表Java Persistence API,它基本上是一个规范,描述了一种将数据持久存储到持久存储(通常是数据库)中的方法. 我们可以将其视为类似于Hibernate的 ORM工具的东西,除了 ...
- Java文档阅读笔记-JPA Tutorial
目录 JPA Tutorial JPA Intrduction JPA Object Relational Mapping Types of Mapping JPA Tutorial JPA(Java ...
- java框架mangedv,Spring集成JPA后,报“Not an managed type: class x.x.x
以前的Spring脚手架项目,因业务需要,是基于多数据源 and不同方言的数据库的,对于普通项目过于复杂了, 于是重新搭了个单数据源的,用STS新建完毕,这是项目目录, 加上配置之后,先列下appli ...
- java企业开发四:ssh+JPA(hibernate实现)
在java企业开发三:struts2+spring3再集成hibernate4基础上使用JPA规范,将Service底层也使用JPA API. 前话:集成JPA(ibernate4实现)使用org.s ...
- java中如何引入mergesort.mergesort_mergesort Merge Sort 问题
归并排序中算法MergeSort()是怎么回事? void MergeSort(int R[],int low,int high) { int mid; if(low Merge Sort 问题 #i ...
- JAVA入门[20]-Spring Data JPA简单示例
Spring 对 JPA 的支持已经非常强大,开发者只需关心核心业务逻辑的实现代码,无需过多关注 EntityManager 的创建.事务处理等 JPA 相关的处理.Spring Data JPA更是 ...
最新文章
- WaveSwipeRefreshLayout
- 贝佐斯成功拉下马斯克,NASA把SpaceX的独家登月合同暂停了
- AI创业公司最佳「开发工具」指南火了,还发现了个可挑战Jupyter的「杀手」
- hbuilder/hbuilderx 无法检测到模拟器
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )
- Linux下route add 命令加入路由列表
- CTFHUB《Web-信息泄露-备份文件下载》网站源码,
- SSH集成log4j日志环境
- 安卓应用安全指南 翻译完成
- android返回键返回指定目录,Android 返回键返回到指定的Activity
- pyQt4导入问题:ImportError: No module named PyQt4
- 面试官交流中的问题与后感
- android拖拽 字体变形,17种文字变形的创意方法
- 集合切分:List集合按照数量切分成若干个集合
- svg怎么转换成png格式?
- 云端虚拟机规格参数快速对比说明
- 为什么网上工商银行安装了U盾不能上网站了?
- qt qled_OLED与QLED:有什么区别?
- 用mysql关联4个表_MySQL多表操作
- C# 简单的操作其他程序