比较JPA的EntityManager接口与Hibernate的Session接口

本文对JPA的EntityManager接口与Hibernate的Session接口进行了比较,本文参考《精通JPA与Hibernate:Java对象持久化技术详解》第3版,2020年出版,作者:孙卫琴。

EntityManager接口与Session接口的许多功能很相似,以下表1-1对这两个接口的方法做了对比。
表1-1 对比EntityManager接口与Session接口

从以上表可以看出,EntityManager接口中的大部分方法在Sesson接口中都有对应的方法。EntityManager的remove()方法与Session的delete()方法的作用基本上相同,两者的一个小小区别是:Session的delete()方法可以删除持久化对象和游离对象,而EntityManager的remove()方法只能删除持久化对象。
如果程序主要通过JPA API访问数据库,但在个别情况下需要访问Hibernate API,那么可以从EntityManager接口中获得底层Session对象:

//获得Hibernate API中的Session
Session session = entityManager.unwrap( Session.class );

下面再总结更新数据库中数据的两种常见方式:
(1)先加载持久化对象,修改持久化对象的属性,然后底层Session在清理缓存时自动同步更新数据库中的相应数据。
以下代码通过JPA API来更新持久化对象:

//使用JPA API
tx = entityManager.getTransaction();
tx.begin(); //开始一个事务
Customer customer=(Customer)entityManager.find(Customer.class,
                                            Long.valueOf(1));
customer.setName("Jack"); //修改Customer持久化对象的name属性
tx.commit(); //清理持久化缓存,更新数据库中的相应数据

以下代码通过Hibernate API来更新持久化对象:

//使用Hibernate API
tx = session.beginTransaction();
Customer customer=(Customer)session.get(Customer.class,
                                         Long.valueOf(1));
customer.setName("Jack"); //修改Customer持久化对象的name属性
tx.commit(); //清理持久化缓存,更新数据库中的相应数据

(2)修改游离对象的属性,然后使该游离对象转变为持久化对象。
以下代码通过JPA API中EntityManager的merge()方法来更新更新数据库中的相应数据:

//使用JPA API
Customer customer=…  //假定customer为游离对象
customer.setName("Jack"); //修改Customer游离对象的name属性

tx = entityManager.getTransaction();
tx.begin(); //开始一个事务

//计划执行一条SQL update语句
Customer mergedCustomer=entityManager.merge(customer);
tx.commit();  //清理持久化缓存,更新数据库中的相应数据

以下代码通过Hibernate API中的Session的update()方法来更新数据库中的相应数据:

//使用Hibernate API
Customer customer=…  //假定customer为游离对象
customer.setName("Jack"); //修改Customer游离对象的name属性

tx = session.beginTransaction();
session.update(customer);  //计划执行一条SQL update语句
tx.commit();  //清理持久化缓存,更新数据库中的相应数据

原文地址:https://blog.51cto.com/sunweiqin/2418795

时间: 2024-08-03 07:10:35

比较JPA的EntityManager接口与Hibernate的Session接口的相关文章

Hibernate中Session的get和load

hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接口提供了4个重载的get方法,分别通过“持久类+主键”和“全类名+主键”以及“锁选项”来获取实体对象. public Object get(Class clazz, Serializable id); public Object get(Class clazz, Serializable id, L

[转]Hibernate中Session的get和load

hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接口提供了4个重载的get方法,分别通过“持久类+主键”和“全类名+主键”以及“锁选项”来获取实体对象. public Object get(Class clazz, Serializable id); public Object get(Class clazz, Serializable id, L

Hibernate的Session的get()和load()方法区别

hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别. get Session接口提供了4个重载的get方法,分别通过"持久类+主键"和"全类名+主键"以及"锁选项"来获取实体对象. public Object get(Class clazz, Serializable id); public Object get(Class clazz, Serializable i

JPA概述以及它和Hibernate之间的关系

http://www.cnblogs.com/Kevin-ZhangCG/p/8996491.html 一.JPA概述以及它和Hibernate之间的关系 1.1.Hibernate 概述 JPA Java Persistence API,是EJB3规范中负责对象持久化的应用程序编程接口(ORM接口),它定义一系列的注释.这些注释大体可分为:类级别注释.方法级别注释.字段级别注释.给实体类添加适当的注释可以在程序运行时告诉Hibernate如何将一个实体类保存到数据库中以及如何将数据以对象的形式

JPA的entityManager的find、getReference、persisit、remove方法的使用

场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 在上面博客中搭建好JPA的HelloWorld后,再新建test包,包下新建Junit测试类 然后将JPA所需的API对象等声明 private EntityManagerFactory entityManagerFactory; private EntityManager entityManage

浅析JPA中EntityManager无法remove entity的问题

今天遇到一个奇怪的事情,利用EntityManager.remove(entity)方法删除一个entity时,删不掉,也不报错.后来经过多方查证,解决了这个问题. ERD Entity定义 ------------- 第一个Entity A --------------- @Entity public class A {     @Id     private Long id;          @Column(nullable = false, unique = true, length =

Hibernate五大核心接口

1. 首先我们介绍一下Configuration接口:配置Hibernate,根据其启动Hibernate,创建SessionFactory对象: 具体使用代码实例: SessionFactory sf = new Configuration().configure().buildSessionFactory(); SessionFactory stf = new AnnotationConfiguration().configure().buildSessionFactory();    //

Hibernate 之核心接口

1.持久化和ORM 持久化是指把数据(内存中的对象)保存到可持久保存的存储设备中(如硬盘),主要应用于将内存中的数据存储到关系型数据库中,在三层结构中,持久层专注于实现系统的逻辑层面,将数据使用者与数据实体进行关联. ORM简称对象-关系型数据映射,在编写程序时,处理数据采用面向对象的方式,保存数据却以关系型数据库的方式,因此需要一种能在两者之间进行转换的机制.这种机制称为ORM.ORM保存了对象和关系型数据库表的映射信息.Hibernate映射信息保存在XML格式的配置文件中. 2 Hiber

Hibernate的核心接口

Hibernate的核心接口一共有5个 Session.SessionFactory.Transaction.Query和Configuration SessionFactory接口 SessionFactroy接口负责初始化Hibernate.它充当数据存储源的代理,并负责创建Session对象. 这里用到了工厂模式.需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够, 当需要操作多个数据库时,可以为每个数据库指定一个