1.Persistence
主要用来获取EntityManagerFactory的实例;
通过静态方法:createEntityManagerFactory 来实现;
该方法有两个重载版本;
带有一个参数:指定persistence.xml中的持久化单元名为参数;
两个参数:    除了上一个参数外,还可添加一个map做参数;map里存放persistence.xml中的properties标签中的属性;可覆盖配置文件的设置;
2.EntityManagerFactory
用来创建EntityManager的实例;
主要方法:
createEntityManager()    ->创建实体管理器对象的实例;
createEntityManager(Map map)    ->和前一个一样作用,多了个map用来指定EntityManager属性;
isOpen()    ->确定工厂实例是否打开;
close()    ->关闭工厂实例,释放资源; 
3.EntityManager的基本方法
新建一个junit测试类;
在类中创建工厂方法、类管理器、事物的属性;
建一个初始化方法并加上@Before注解,在每次执行测试方法时会自动调用;
见一个释放资源的方法,加上@After注解;
代码:
private EntityManagerFactory factory;
private EntityManager manager;
private EntityTransaction transaction;
//初始化,在每个方法开始之前调用加@Before
@Before
public void init(){
factory=Persistence.createEntityManagerFactory("jpa_emp");
manager=factory.createEntityManager();
transaction=manager.getTransaction();
transaction.begin();
}
//释放资源,在每个方法调用之后调用加@After
@After
public void destory(){
transaction.commit();
manager.close();
factory.close();
}

1)find()方法
代码:
//测试EntityManager的find()方法
@Test
public void testFind() {
//参数为实体类的class对象和主键id
Emp emp=manager.find(Emp.class, 1);
System.out.println("------------------------");
System.out.println(emp);
}

结果:
Hibernate:
select
emp0_.id as id1_0_0_,
emp0_.birthday as birthday2_0_0_,
emp0_.name as name3_0_0_,
emp0_.salary as salary4_0_0_
from
tb_emp emp0_
where
emp0_.id=?
------------------------
Emp [id=1, name=诸葛村夫, birthday=2019-03-17, salary=2000]

2)getReference方法
代码:
//测试getReference;相当于hibernate的Session的load()方法
@Test
public void testGetReference(){
Emp emp=manager.getReference(Emp.class, 1);
System.out.println("------------------------");
System.out.println(emp);
}

结果:
------------------------
Hibernate:
select
emp0_.id as id1_0_0_,
emp0_.birthday as birthday2_0_0_,
emp0_.name as name3_0_0_,
emp0_.salary as salary4_0_0_
from
tb_emp emp0_
where
emp0_.id=?
Emp [id=1, name=诸葛孔明, birthday=2019-03-17, salary=2000]

3)persistence()方法
代码:
//persistence()类似hibernate的save(),将临时对象变为持久化对象;
//和save()方法的不同:如果对象有设置id则会抛出异常
@Test
public void testPersistence(){
Emp emp=new Emp();
emp.setBirthday(new Date());
emp.setName("小懿子");
emp.setSalary(2500);
manager.persist(emp);
System.out.println(emp.getId());
}

结果:
Hibernate:
insert
into
tb_emp
(birthday, name, salary)
values
(?, ?, ?)
24

4)remove()方法
代码:
//remove()
//类似hibernate的delete()方法;从数据库中移除对象;
//该方法只能移除持久化对象;而hibernate的delete方法能移除游离对象
@Test
public void testRemove(){
//不可用来移除游离对象
//Emp emp=new Emp();
//emp.setId(22);
//获取持久化对象
Emp emp=manager.find(Emp.class, 22);
manager.remove(emp);
}

结果:
Hibernate:
select
emp0_.id as id1_0_0_,
emp0_.birthday as birthday2_0_0_,
emp0_.name as name3_0_0_,
emp0_.salary as salary4_0_0_
from
tb_emp emp0_
where
emp0_.id=?
Hibernate:
delete
from
tb_emp
where
id=?

5)几种方法的详解
4.实体的状态
在jpa规范中,EntityManager对象被用来持久化操作;
实体作为普通java对象,只有在调用EntityManager将其持久化后才能变成持久化对象;
实体的几种状态:
新建    ->新创建的对象,尚未拥有持久性主键;
持久化状态    ->已经拥有了持久化主键,并和持久化建立了上下文环境;
游离    ->拥有持久化主键,但没有和持久建立上下文环境;
删除    ->拥有持久化主键,和持久化建立了上下文环境,但是从数据库中删除;

转载于:https://www.cnblogs.com/ShiningArmor/p/10548801.html

EntityManager的基本方法相关推荐

  1. JPA的entityManager的find方法与getReference方法的区别

    场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...

  2. springboot使用EntityManager执行自定义SQL

    1.在代码中注入 EntityManager import javax.persistence.EntityManager;@Autowired EntityManager entityManager ...

  3. 从Spring Data JPA访问EntityManager

    Spring Data JPA允许您通过使用Repository接口来快速开发数据访问层. 有时,您需要从Spring Data JPA访问EntityManager. 这篇文章向您展示了如何访问En ...

  4. 初始化懒惰关系以及何时使用它们的5种方法

    实体之间关系的延迟加载是JPA中公认的最佳实践. 它的主要目标是仅从数据库中检索请求的实体,并仅在需要时加载相关实体. 如果我们只需要请求的实体,那是一个很好的方法. 但是,如果我们还需要一些相关实体 ...

  5. Spring Boot-------JPA——EntityManager构建通用DAO

    EntityManager EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满 ...

  6. jpa 托管_JPA EntityManager详解(一)

    持久化上下文(Persistence Contexts)的相关知识,内容包括如何从Java EE容器中创建EntityManager对象.如何从Java SE中创建EntityManager对象.持久 ...

  7. Hibernate Session和Jpa EntityManager

    为什么80%的码农都做不了架构师?>>>    本文主要比较一下二者操作实体类的方法的关系和区别. 本文适用 Hibernate:4.3.11.Final 和 spring-data ...

  8. JPA EntityManager –HibernateEntityManager

    JPA EntityManager is at the core of Java Persistence API. Hibernate is the most widely used JPA impl ...

  9. SpringDataJPA+Hibernate框架源码剖析(六)@PersistenceContext和@Autowired注入EntityManager的区别

    SpringDataJPA+Hibernate框架源码剖析系列文章: SpringDataJPA+Hibernate框架源码剖析(一)框架介绍 SpringDataJPA+Hibernate框架源码剖 ...

最新文章

  1. python项目-python完整项目
  2. 查找nginx安装的路径以及相关安装操作命令
  3. 鸿蒙关键技术研究,华为鸿蒙 2.0 系统主题演讲公布,详细架构 9 月 11 日揭晓
  4. 顶级程序员的心得 - Coders at Work
  5. hdu 6016 Count the Sheep
  6. 将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
  7. 搜索引擎的基本工作原理
  8. Linux下服务器密码正确,登录的时候却提示密码错误
  9. ArangoDB教程(二)-AQL语句使用,图使用,结合WEB界面端
  10. 农用化学活性成分的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  11. 苹果x微信为什么不出定位服务器,苹果x微信发动态为什么显示不了位置
  12. 厦门大学研究生计算机复试分数线,关于2018厦门大学研究生考试复试分数线的一些公告...
  13. 异构数据半小时实现搜索功能,一个系统搞定
  14. 如何进行图片局部转TXT文档
  15. 如何替换 JavaScript 中所有出现的字符串
  16. PyFlink 教程(三):PyFlink DataStream API - state timer
  17. 虚拟机Ubuntu18.04开机后一直卡在[OK] Started GNOME Display Manager处,进不去系统。
  18. HikariPool-1 - Exception during pool initialization.的解决方法
  19. Xcode7真机调试iOS10
  20. Windows 与Linux 的双重启动

热门文章

  1. axios.get php,vue + axios get下载文件功能
  2. 智慧交通:基于PP-Vehicle的交通监控分析系统
  3. GXG全渠道转型 信赖百胜软件
  4. Vue电商项目 封装svg
  5. 【解决】application.yml 变灰色
  6. 中国李宁:2018新零售首秀
  7. Merge the incoming changes into the current branch和Rebase the current branch on top of the incoming
  8. 解密赚钱的十大理财方式
  9. Java实现二分图的最大权匹配
  10. excel 公式 单引号 concat_excel数据提取技巧:从混合文本中提取数字的万能公式...