我正在使用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实体相关推荐

  1. Spring JpaRepository示例(内存中)

    这篇文章描述了一个使用内存中HSQL数据库的简单Spring JpaRepository示例. 该代码示例可从GitHub的Spring-JpaRepository目录中获得. 它基于带有注释的Spr ...

  2. Java SSM4——Spring

    Java SSM4--Spring Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架) Spring的优势 方便解耦,简化开发 Spring就是一个容器,可以将所有对象创建 ...

  3. java spring 配置文件_[Java教程]Spring配置文件

    [Java教程]Spring配置文件 0 2016-03-19 00:00:08 Spring配置文件是集成了Spring框架的项目的核心,引擎从哪里开始,中间都执行了哪些操作,小谈一下它的执行流程. ...

  4. java mvc 小程序_[Java教程]Spring MVC 的环境搭建和入门小程序

    [Java教程]Spring MVC 的环境搭建和入门小程序 0 2017-02-17 00:00:16 1.1.下载spring框架包. 1.1.1百度搜索Spring Framework. 进入s ...

  5. java语言如何跳转界面_在java中spring mvc页面如何跳转,详细图解

    众所周知,java编程语言的应用在当今社会必不可少,它是当下人们提升自己充实自身的重要选择.所以,今天主要来为大家介绍java的入门知识,在 java中spring mvc页面如何跳转,通过详细的图片 ...

  6. 使用Java和Spring构建现代Web应用程序

    使用Spring Framework创建Java Web应用程序从未如此简单. 如果您已经熟悉Java并且几乎没有创建Web应用程序的经验,或者如果您担心所有很酷的孩子都放弃Java取而代之的是Rub ...

  7. 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. ...

  8. java 普通类request_[Java教程]spring在普通类中获取session和request

    [Java教程]spring在普通类中获取session和request 0 2014-08-12 08:01:13 在使用spring时,经常需要在普通类中获取session,request等对像. ...

  9. Java笔记-Spring中RabbitMQ的调用

    目录 基本概念 代码与演示 基本概念 Spring中已经整合了RabbitMQ,通过配置bean文件,然后在源码中加载,可以简化代码操作. 身为C++程序员不得不说这种方式真的是太爽了. 在本人做过的 ...

  10. (四)java版spring cloud+spring boot 社交电子商务平台-断路器(Hystrix)

    b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTempl ...

最新文章

  1. 树莓派查看mysql的密码_树莓派安装MySQL 后若何获取登录密码
  2. Linux 文件系统初探
  3. 5G 时代,优酷推出的帧享究竟是什么?
  4. PMP第六版十五至尊图记忆方法
  5. 手机上最好用的五笔输入法_手机输入法哪家最好用?我推荐百度,不好用你打我...
  6. 移动平均法又称滑动平均法、滑动平均模型法(Moving average,MA)
  7. ggplot2设置坐标轴范围_ggplot2学习笔记之图形排列
  8. length()、size()、sizeof()三者的区别
  9. LSL-- Flow Control
  10. javascript玩转ElasticSearch(一)
  11. java epics_Visual Paradigm敏捷开发教程(7):如何管理Epics
  12. 今日头条校招2016-09-28在线编程题(2题)
  13. transform:translate()方法坐标详解
  14. python地图可视化
  15. WK2204 - spi转uart调试记录
  16. C++异步调用利器future/promise实现原理
  17. 北京高校应届生就业招聘信息网址
  18. java中 == 和 equels
  19. ap计算机知识点总结,AP Calculus(ABBC)知识点总结
  20. 2022年中国天然橡胶产业链全景图谱及行业上中下游市场剖析

热门文章

  1. CRT团队组员博客地址统计
  2. JAVA第五课:正则表达式
  3. 大屏布局css,前端大屏项目的屏幕适配方案
  4. Android 中Goolgle 相关服务的移植[转]
  5. 简单实现Rectrofit+RXJAVA+Fresco
  6. linux drm 写屏幕,Linux DRM Graphic 显示简单介绍
  7. Opencv最新版本Opencv3.3.0集成了DNN神经网络模块
  8. 亚洲杯:国足告别阿联酋
  9. 网易公开课——可汗学院公开课:现代密码学(1)
  10. 考研政治---马克思主义基本原理概论---认识论