JPA和hibernate关系
来源:互联网 发布:au2018破解版 mac 编辑:程序博客网 时间:2024/05/18 00:36
项目中用到了JPA,以前一直用hibernate,忽然用到JPA感觉很迷茫,就看了下他们之间的关系。
JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。那么Hibernate是如何实现与JPA的这种关系的呢。Hibernate主要是通过三个组件来实现的,及hibernate-annotation、hibernate-entitymanager和hibernate-core。
hibernate-annotation是Hibernate支持annotation方式配置的基础,它包括了标准的JPA annotation以及Hibernate自身特殊功能的annotation。
hibernate-core是Hibernate的核心实现,提供了Hibernate所有的核心功能。
hibernate-entitymanager实现了标准的JPA,可以把它看成hibernate-core和JPA之间的适配器,它并不直接提供ORM的功能,而是对hibernate-core进行封装,使得Hibernate符合JPA的规范。
下面重点介绍一下hibernate-entitymanager包的主要类及实现。
HibernatePersistence.java,实现了JPA的PersistenceProvider接口,它提供createEntityManagerFactory和createContainerEntityManagerFactory两个方法来创建EntityManagerFactory对象,这两个方法底层都是调用的EJB3Configuration对象的buildEntityManagerFactory方法,来解析JPA配置文件persistence.xml,,并创建EntityManagerFactory对象。
EntityManagerFactory对象的实现是EntityManagerFactoryImpl类,这个类有一个最重要的private属性就是Hibernate的核心对象之一SessionFactory。这个类最重要的方法是createEntityManager,来返回EntityMnagaer对象,而sessionFactory属性也传入了该方法。
EntityManager对象的实现是EntityManagerImpl类,这个类继承自AbstractEntityManagerImpl类,在AbstractEntityManager类中有一个抽象方法getSession来获得Hibernate的Session对象,正是在这个Session对象的实际支持下,EntityManagerImpl类实现了JPA的EntityManager接口的所有方法,并完成实际的ORM操作。
此外,hibernate-entitymanager包中还有QueryImpl类利用EntityManagerImpl的支持实现了JPA的Query接口;TransactionImpl利用EntityManagerImpl的支持实现了JPA的EntityTransaction接口。
至此,Hibernate通过hibernate-entitymanager包完成了对于JPA的全部支持工作。
3.JPA和hibernate在Model定义时的不同
jpa中有Entity, Table,hibernate中也有,但是内容不同
jpa中有Column,OneToMany等,Hibernate中没有,也没有替代品
- JPA和hibernate关系
- jpa 和hibernate 关系
- JPA和Hibernate的关系
- JPA和Hibernate的关系
- JPA和Hibernate的关系
- JPA和Hibernate的关系
- JPA和Hibernate的关系
- hibernate和jpa的关系
- JPA和Hibernate的关系
- JPA和Hibernate的关系1
- JPA和hibernate的缓存关系
- 关于Hibernate和JPA的关系<转载!>
- hibernate 和 JPA之间的关系
- JPA是什么?他和Hibernate什么关系?
- JPA是什么?他和Hibernate什么关系?
- JPA和Hibernate关系之浅谈
- 总结篇-Hibernate和JPA关系
- Hibernate,JPA 的关系。
- 3-07 Linux内核链表深度分析
- Android 按键流程分析笔记
- yii框架跨域传值到laravel,接口调用
- Linux使用(一):安装VMware虚拟机
- Java的SPI机制
- JPA和hibernate关系
- 深入解析GDAL库的RasterIO()函数
- ffmepg源码中的 -re
- HTML5学习_day12(2)--流式布局
- leetCode练习(68)
- Mac终端命令
- 第四周项目4——建设双链表算法库
- New IO JAVA1.4特性
- Leetcode 113 Path Sum II