JPA 之 detach方法的使用及注意事项
detach() 方法的介绍
detach() 方法将实体从持久化上下文中移除,变成detach(游离)状态。变成detach状态的实体和数据库的记录不再同步。
从代码角度来看, 比如找到一个实体对象:
Usr usr = entityManager.find(Usr.class, 1L);
对这个实体进行detach
entityManager.detach(usr);
分离之后, 对这个实体的属性进行更改, 也不会写入到数据库,举例来看,用户对象的name的值是“刘备”,如果将对象从持久上下文detach,则修改这个对象属性,提交事务之后, 数据库也不会更新,代码如下:
Usr usr = entityManager.find(Usr.class, 1);entityManager.getTransaction().begin();entityManager.detach(usr);usr.setName("刘备2");entityManager.getTransaction().commit();
执行detach之后, 这个对象就不在持久上下文了,也就是使用实体管理器的contains() 方法找不到这个对象了,使用JUnit 测试如下:
Assertions.assertFalse(entityManager.contains(usr));
完整的测试代码
@Testpublic void detach() {EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("jpaency_mysql");EntityManager entityManager = emFactory.createEntityManager();Usr usr = entityManager.find(Usr.class, 1);entityManager.getTransaction().begin();entityManager.detach(usr); //分离对象Assertions.assertFalse(entityManager.contains(usr));//对象不包含在实体管理器中usr.setName("刘备2"); //对象值更新不会同步到数据库entityManager.getTransaction().commit();entityManager.close();emFactory.close();}
使用注意
detach() 方法一般比较少直接使用。
**需要特别注意的是: ** detach() 方法之后不能再调用merge()方法了, 因为mergef方法除了可以更新之外, 完整的功能是会将detach状态转化为managed状态, 也就是将实体加入持久化上下文,之后在事务提交的时候,如果有改动,则更改到数据库。
与 detach() 相近的方法
- remove() , 将实体从持久化上下文中移除,同时从数据库中删除对应的记录。
- clear() ,将持久上下文的所有实体变成detach状态。
本篇演示项目地址
- https://github.com/osxm/jpa-ency/blob/master/src/test/java/com/osxm/jpa/api/DetachTests.java
JPA 之 detach方法的使用及注意事项相关推荐
- Jquery empty() remove() detach() 方法的区别
方法简介: empty() This method removes not only child (and other descendant) elements, but also any text ...
- jQuery 核心 - noConflict() 方法,jQuery 文档操作 - detach() 方法
为什么80%的码农都做不了架构师?>>> 原文地址:http://www.w3school.com.cn/jquery/manipulation_detach.asp 实例 使 ...
- jpa常用查询方法使用总结自定义sql查询
文章目录 一.JPA自定义查询方法 实体类 1.1 单条件查询一条数据 1.2 单条件查询多条数据 1.3 多条件查询数据 1.4 查询某一个字段 1.5 in查询 1.6 like查询 二.自定义s ...
- 使用Collections.emptyList()生成的List不支持add方法___Java Collections.emptyList方法的使用及注意事项
使用Collections.emptyList()生成的List不支持add方法 今天使用Collections.emptyList(),返回一个空的List 但是发现它不支持Add功能,调用Add会 ...
- Java Collections.emptyList() 方法的使用及注意事项
Java Collections.emptyList方法的使用及注意事项 一.emptyList() 作用:返回一个空的List(使用前提是不会再对返回的list进行增加和删除操作): 好处: 1. ...
- 如何通过打造个人IP创业赚钱?打造个人IP方法、策略和注意事项
今天与大家分享如果通过15天时间快速打造赚钱的个人IP. 一.什么是个人IP 举几个例子,大家就很清晰明了了. 比如,很多小伙伴都知道的罗辑思维,罗辑思维现估值是13.2亿,可当年他刚开始用相机录视频 ...
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(六): 一些常用的数据库 注解...
一. 实体 Bean 每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明. 声明实体Bean @Entity public class Flight im ...
- 注解的力量 -----Spring 2.5 JPA hibernate 使用方法的点滴整理(四):使用 命名空间 简化配置...
在(三)里面.我们引入了 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBe ...
- jpa ONetoMany使用方法
one部分 时机项目中使用到的. @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY,mappedBy="dcpDataS ...
- Java 判断字符串是否为空的四种方法、优缺点与注意事项
以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s)); 方法二: ...
最新文章
- springboot整合springSecurity使用
- TFS - Team Foundation Server 的安装记录
- 窗口捕获显示黑屏_win10每次重启黑屏假死
- mfc 固定编辑框输入上限和下限_MFC中编辑框数字限制范围
- 驯服 Tiger: 并发集合
- GSM:联通项目中的常见术语(BTS、BSC、MSC、VLR、HLR)
- 创建私有CA及其签署和吊销证书
- 允许局域网内其他主机访问本地MySql数据库
- C++结构体字节对齐
- 最大流模板(Edmonds-Karp)
- 判断字符串是只是数字
- Android面试题整理【转载】
- Jstack查看耗CPU的线程
- 一个借口几万条数据但是只返回十条_爬虫实践之爬取10000条菜谱数据
- 基于android的家庭财务通 .apk,毕业设计(论文)-基于Android的家庭财务管家的设计与实现.doc...
- caffe入门学习(5):绘制网络结构图
- js原生代码实现轮播图淡入淡出和滚动的效果
- 10. Linux驱动 - Ubuntu驱动签名
- 3. 工业大数据的创新价值
- 到底无支付牌照的电商公司能开展什么样的业务!!
热门文章
- python学习感想
- 2020年陕西省高等职业院校技能大赛信息安全管理与评估赛项竞赛手册
- VScode输入感叹号时,没有出现模板
- AG-DST论文笔记
- 三级分销系统产品设计原理
- Flink1.12-2021黑马 8 Flink高级特性和新特性
- linux bridge 抓包,Linux bridge hairpin mode
- Kalman Filter— Priori/Posteriori Error Covariance Matrix
- 23 种设计模式的分类 - Design Patterns
- android怎么监听多点触摸_Android笔记:触摸事件的分析与总结----多点触控