pro JPA2 精通java持久化API 第六章
来源:互联网 发布:淘宝店招制作教程 编辑:程序博客网 时间:2024/06/05 19:57
1.什么是持久化上下文,持久化上下文是一个托管实体的集合。
个人理解,持久上下文,是一个集合,然后里面有很多实体的实例,由实体管理器进行操作。
2.事务范围的持久化上下文,它是容器在事务期间创建,事务完成时关闭。
我们项目中使用的spring+jpa(hibernate实现),在增删改的时候,持久化上下文必须和事务绑定,负责会出错。因为(所有容器托管的实体管理器均依赖jta事务,因为他们可以使用事务作为跟踪持久化上下文的方式)
也就是只有当实体是由一个持久化上下文管理的时候,才可以增删改。意味着,只有事务范围内的实体管理器才能增删改
find()用来寻找 并且返回实体(托管状态);
而getReference()返回的是一个代理。只是访问了其主键,如果找不到这个实体,异常,如果getReference()返回的实体不是被托管的,那么久不能安全使用,
也就是需要在一个持久化上下文中。
级联操作
@Entity
public class Employee5 {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int id;
public String name;
@ManyToOne(cascade=CascadeType.PERSIST)//级联操作,有级联持久化,级联更新,级联删除。
public Adress adress;
}
Employee5 employee5 = new Employee5();
Adress adress = new Adress();
adress.name="ad";
employee5.adress= adress;
entityManager.persist(employee5);
entityManager.flush();
在持久化employee5对象的时候也会持久化adress对象。(设置了级联操作,级联操作是单向的,如果打算在持久化adress的时候也持久化employee那么在adrees也要加cascade=CascadeType.PERSIST)
clear()可以用来清除持久化上下文,
刷新持久化上下文有两种,第一是在事务提交时,第二是在实体管理器调用flush()方法。
merge()方法会产生一个新的被托管的实例,是新的实例被托管,
Employee e =entityManager. merge(employee);返回的是一个和原employee不同的对象,的新实例e。
- pro JPA2 精通java持久化API 第六章
- pro JPA2 精通java持久化API 第四章
- pro JPA2 精通java持久化API 第五章
- pro JPA2 精通java持久化API 第七章
- pro JPA2 精通java持久化API 第八章
- pro JPA2 精通java持久化API 第十章
- Pro JPA2读书笔记系列(六)-第六章(实体管理器)
- Pro JPA2读书笔记系列(九)-第九章(条件API)
- Pro JPA2读书笔记系列(十)-第九章(条件API)-干货
- java持久化API
- 《精通iOS开发·第六版》数据持久化基础知识之对象归档持久化
- 《精通iOS开发·第六版》数据持久化基础知识之属性列表持久化
- 《精通iOS开发·第六版》数据持久化基础知识之CoreData持久化
- 《精通iOS开发·第六版》数据持久化基础知识之SOLite3持久化
- 《精通hibernate:java持久化...》---持久化类
- Pro JPA2读书笔记系列(二)-第二章(入门)
- Pro JPA2读书笔记系列(三)-第三章(企业应用程序)
- Pro JPA2读书笔记系列(四)-第四章(对象-关系映射)
- mybatis中占位符与拼接符的作用
- HDU
- Windows Server搭建Tomcat服务器及Java项目应用
- web项目jdk mysql tomcat redis nginx memcache linux部署细节
- 认识一下SELinux
- pro JPA2 精通java持久化API 第六章
- 为什么你总被人蹭网?谈谈WiFi破解的两三事
- XML 解析(上)
- Shader 基础使用(二) --- surface Shader
- 二、神经网络的结构
- 【PSO】量子粒子群算法(QPSO)
- JavaScript脚本语言
- 后缀数组dc3模板(范围1e6而且多样例要用dc3)
- HDU-1069-Monkey and Banana