java detach_java – Spring JpaRepository – Detach和Attach实体
我正在使用spring boot并在jpa上休眠.我正在使用JpaRepository接口来实现我的存储库.与以下UserRepository一样
public interface UserRepository extends JpaRepository {
}
我想实现以下目标
>加载用户实体.
>更改实体对象的状态,例如user.setName( “foo” 的)
>执行外部系统Web服务调用.将呼叫结果保存在DB中
>仅在成功响应此Web服务调用时,将新用户状态保存在存储库中.
所有上述步骤都不会发生在一个事务中,即外部服务调用不在事务中.
当我通过其存储库将我的Web服务结果保存在DB中时,我的用户实体更改也会保存.根据我的理解,这是由于在步骤#3中刷新了持久性上下文.在一些谷歌之后,我认为我可以实现我的目的,如果我可以在第一步分离我的用户实体并在步骤4重新连接它.
请确认我的理解是否正确以及如何实现这一目标? JpaRepository接口中没有用于分离实体的方法.
以下是代码来说明
public void updateUser(int id, String name, int changeReqId){
User mUser = userRepository.findOne(id); //1
mUser.setName(name); //2
ChangeRequest cr = changeRequestRepository.findOne(changeReqId);
ChangeResponse rs = userWebService.updateDetails(mUser); //3
if(rs.isAccepted()){
userRepository.saveAndFlush(mUser); //4
}
cr.setResponseCode(rs.getCode());
changeRequestRepository.saveAndFlush(cr); //this call also saves the changes at step 2
}
谢谢
解决方法:
如果您使用的是JPA 2.0,则可以使用EntityManager#detach()从持久性上下文中分离单个实体.此外,Hibernate有一个Session#evict(),它有同样的目的.
由于JpaRepository本身不提供此功能,因此您可以使用add a custom implementation,就像这样
public interface UserRepositoryCustom {
...
void detachUser(User u);
...
}
public interface UserRepository extends JpaRepository, UserRepositoryCustom {
...
}
@Repository
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
...
@PersistenceContext
private EntityManager entityManager;
@Override
public void detachUser(User u) {
entityManager.detach(u);
}
...
}
我没有尝试过这段代码,但你应该能够使它运行起来.您甚至可以尝试使用@PersistenceContext在服务类(其中updateUser()是)中保留EntityManager,并避免将自定义实现添加到存储库的喧嚣.
标签:java,spring,spring-data-jpa,jpa,hibernate
来源: https://codeday.me/bug/20190925/1817836.html
java detach_java – Spring JpaRepository – Detach和Attach实体相关推荐
- Spring JpaRepository示例(内存中)
这篇文章描述了一个使用内存中HSQL数据库的简单Spring JpaRepository示例. 该代码示例可从GitHub的Spring-JpaRepository目录中获得. 它基于带有注释的Spr ...
- Java SSM4——Spring
Java SSM4--Spring Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架) Spring的优势 方便解耦,简化开发 Spring就是一个容器,可以将所有对象创建 ...
- java spring 配置文件_[Java教程]Spring配置文件
[Java教程]Spring配置文件 0 2016-03-19 00:00:08 Spring配置文件是集成了Spring框架的项目的核心,引擎从哪里开始,中间都执行了哪些操作,小谈一下它的执行流程. ...
- java mvc 小程序_[Java教程]Spring MVC 的环境搭建和入门小程序
[Java教程]Spring MVC 的环境搭建和入门小程序 0 2017-02-17 00:00:16 1.1.下载spring框架包. 1.1.1百度搜索Spring Framework. 进入s ...
- java语言如何跳转界面_在java中spring mvc页面如何跳转,详细图解
众所周知,java编程语言的应用在当今社会必不可少,它是当下人们提升自己充实自身的重要选择.所以,今天主要来为大家介绍java的入门知识,在 java中spring mvc页面如何跳转,通过详细的图片 ...
- 使用Java和Spring构建现代Web应用程序
使用Spring Framework创建Java Web应用程序从未如此简单. 如果您已经熟悉Java并且几乎没有创建Web应用程序的经验,或者如果您担心所有很酷的孩子都放弃Java取而代之的是Rub ...
- mongodb java spring_[Java教程]Spring 与 mongoDB 整合
[Java教程]Spring 与 mongoDB 整合 0 2017-02-07 00:00:39 首先需要引入jar包 1 2 org.mongodb 3 mongodb-driver 4 3.3. ...
- java 普通类request_[Java教程]spring在普通类中获取session和request
[Java教程]spring在普通类中获取session和request 0 2014-08-12 08:01:13 在使用spring时,经常需要在普通类中获取session,request等对像. ...
- Java笔记-Spring中RabbitMQ的调用
目录 基本概念 代码与演示 基本概念 Spring中已经整合了RabbitMQ,通过配置bean文件,然后在源码中加载,可以简化代码操作. 身为C++程序员不得不说这种方式真的是太爽了. 在本人做过的 ...
- (四)java版spring cloud+spring boot 社交电子商务平台-断路器(Hystrix)
b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTempl ...
最新文章
- 树莓派查看mysql的密码_树莓派安装MySQL 后若何获取登录密码
- Linux 文件系统初探
- 5G 时代,优酷推出的帧享究竟是什么?
- PMP第六版十五至尊图记忆方法
- 手机上最好用的五笔输入法_手机输入法哪家最好用?我推荐百度,不好用你打我...
- 移动平均法又称滑动平均法、滑动平均模型法(Moving average,MA)
- ggplot2设置坐标轴范围_ggplot2学习笔记之图形排列
- length()、size()、sizeof()三者的区别
- LSL-- Flow Control
- javascript玩转ElasticSearch(一)
- java epics_Visual Paradigm敏捷开发教程(7):如何管理Epics
- 今日头条校招2016-09-28在线编程题(2题)
- transform:translate()方法坐标详解
- python地图可视化
- WK2204 - spi转uart调试记录
- C++异步调用利器future/promise实现原理
- 北京高校应届生就业招聘信息网址
- java中 == 和 equels
- ap计算机知识点总结,AP Calculus(ABBC)知识点总结
- 2022年中国天然橡胶产业链全景图谱及行业上中下游市场剖析