jpa--7.api(EntityManager其他方法)
2018-03-28 00:12
435 查看
1 Merge
1.1 概念
merge (T entity):merge() 用于处理 Entity 的同步。即数据库的插入和更新操作总的来说:
类似于 hibernate Session
的 saveOrUpdate
方法.
1.2 流程
1.3 传入的是一个临时对象(insert)
//1. 若传入的是一个临时对象//会创建一个新的对象,
把临时对象的属性复制到新的对象中,
然后对新的对象执行持久化操作.
所以
//新的对象中有 id,
但以前的临时对象中没有 id.
@Test
public void testMerge1(){
Customercustomer= newCustomer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setEmail("cc@163.com");
customer.setLastName("CC");
Customercustomer2= entityManager.merge(customer);
System.out.println("customer#id:"+ customer.getId());
System.out.println("customer2#id:"+ customer2.getId());
}
1.4 游离对象,缓存中没有,数据库没有(insert)
//若传入的是一个游离对象,即传入的对象有 OID.
//1. 若在 EntityManager
缓存中没有该对象
//2. 若在数据库中也没有对应的记录
//3. JPA 会创建一个新的对象,
然后把当前游离对象的属性复制到新创建的对象中
//4. 对新创建的对象执行 insert
操作.
@Test
public void testMerge2(){
Customercustomer= newCustomer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setEmail("dd@163.com");
customer.setLastName("DD");
customer.setId(100);//oid
Customercustomer2= entityManager.merge(customer);
System.out.println("customer#id:"+ customer.getId());
System.out.println("customer2#id:"+ customer2.getId());
}
1.5 游离对象,缓存中没有,数据库有(update)
//若传入的是一个游离对象,即传入的对象有 OID.
//1. 若在 EntityManager
缓存中没有该对象
//2. 若在数据库中也有对应的记录
//3. JPA 会查询对应的记录,
然后返回该记录对一个的对象,
再然后会把游离对象的属性复制到查询到的对象中.
//4. 对查询到的对象执行 update
操作.
@Test
public void testMerge3(){
Customercustomer= newCustomer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setEmail("ee@163.com");
customer.setLastName("EE");
customer.setId(5);
Customercustomer2= entityManager.merge(customer);
System.out.println(customer == customer2); //false
}
1.6 游离对象,缓存中有(update)
//若传入的是一个游离对象,即传入的对象有 OID.
//1. 若在 EntityManager
缓存中有对应的对象
//2. JPA 会把游离对象的属性复制到查询到EntityManager
缓存中的对象中.
//3. EntityManager 缓存中的对象执行 UPDATE.
@Test
public void testMerge4(){
Customercustomer= newCustomer();
customer.setAge(18);
customer.setBirth(new Date());
customer.setCreatedTime(new Date());
customer.setEmail("dd@163.com");
customer.setLastName("DD");
customer.setId(5);
Customercustomer2= entityManager.find(Customer.class, 4);
entityManager.merge(customer);
System.out.println(customer == customer2); //false
}
2 强制同步
2.1 Flush—同步缓存
flush ():同步持久上下文环境,即将持久上下文环境的所有未保存实体的状态信息保存到数据库中。2.2 Refresh—同步数据库
refresh (Objectentity):用数据库实体记录的值更新实体对象的状态,即更新实例的属性值。由于jpa自带一级缓存,所以查询时就直接走缓存,这个方法就是强制不走缓存而是访问数据库
3 其他方法
setFlushMode (FlushModeType flushMode):设置持久上下文环境的Flush模式。参数可以取2个枚举FlushModeType.AUTO为自动更新数据库实体,FlushModeType.COMMIT 为直到提交事务时才更新数据库记录。getFlushMode ():获取持久上下文环境的Flush模式。返回FlushModeType类的枚举值。
clear ():清除持久上下文环境,断开所有关联的实体。如果这时还有未提交的更新则会被撤消。
contains (Object entity):判断一个实例是否属于当前持久上下文环境管理的实体。
isOpen ():判断当前的实体管理器是否是打开状态。
getTransaction ():返回资源层的事务对象。EntityTransaction实例可以用于开始和提交多个事务。
close ():关闭实体管理器。之后若调用实体管理器实例的方法或其派生的查询对象的方法都将抛出 IllegalstateException 异常,除了getTransaction 和 isOpen方法(返回 false)。不过,当与实体管理器关联的事务处于活动状态时,调用 close 方法后持久上下文将仍处于被管理状态,直到事务完成。
4 创建查询对象
• createQuery (String qlString):创建一个查询对象。
• createNamedQuery (String name):根据命名的查询语句块创建查询对象。参数为命名的查询语句。
• createNativeQuery (String sqlString):使用标准 SQL语句创建查询对象。参数为标准SQL语句字符串。
• createNativeQuery (String sqls, StringresultSetMapping):使用标准SQL语句创建查询对象,并指定返回结果集 Map的名称。
源码参考:https://download.csdn.net/download/qq_26553781/10312434
相关文章推荐
- hibernate saveOrUpdate 与JPA的merge,等其他api方法
- JPA-entityManager的基本方法
- Java持久性API(JPA)第7讲——实体生命周期及生命周期回调方法
- JPA联合查询方法二(应用托管的(application-managed)EntityManager对象 )
- JPA EntityManager的四个主要方法 ——persist,merge,refresh和remove
- JPA EntityManager的四个主要方法 — persist,merge,refresh和remove 2011-10-24 10:21
- 持久化API(JPA)系列(四)管理器EntityManager--执行数据库更新
- 暂时只会这种导航,实时显示自己的位置,,求其他更好的方法,或api
- JPA EntityManager的四个主要方法 ——persist,merge,refresh和remove
- 16-常用对象API(集合框架-工具类-Collections-其他方法&将非同步集合转成同步集合的方法) 17-常用对象API(集合框架-工具类-Arrays-方法介绍)_20171202
- JPA EntityManager的四个主要方法 ——persist,merge,refresh和remove
- JPA EntityManager的四个主要方法:persist,merge,refresh和remove
- JPA EntityManager的四个主要方法:persist,merge,refresh和remove
- 19-集合框架工具类-16-常用对象API(集合框架-工具类-Collections-其他方法&将非同步集合转成同步集合的方法)
- 调用其他服务器的api时,暂时处理跨域问题的方法——No 'Access-Control-Allow-Origin' header is present on the requested resour
- JPA EntityManager的四个主要方法 ——persist,merge,refresh和remove
- JPA性能方法------EntityManager的find()与getReference()的区别
- 本工程调用其他工程的api的公共调用方法
- Java持久性API(JPA)第7讲——实体生命周期及生命周期回调方法
- jquery ajax方法和其他api回顾