jpa和hibernate

来源:互联网 发布:百度时序数据库 编辑:程序博客网 时间:2024/06/06 02:35

1. Hibernate

  JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个。从功能上来说,JPA现在就是Hibernate功能的一个子集。Hibernate 从3.2开始,就开始兼容JPA。Hibernate3.2获得了Sun TCK的 JPA(Java  Persistence API) 兼容认证。

  例如: 

  (1)实体对象的状态,在Hibernate有自由、持久、游离三种,JPA里有new,managed,detached,removed,而这些状态都是一一对应的。

  (2)flush方法,都是对应的,

  (3)Query query = manager.createQuery(sql),它在Hibernate里写法上是session,而在JPA中变成了  manager

 

2.  JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。

  那么Hibernate是如何实现与JPA 的这种关系的呢?

  Hibernate主要是通过三个组件来实现的,及hibernate-annotation、hibernate-entitymanager和hibernate-core。

  (1)hibernate-annotation是Hibernate支持annotation方式配置的基础,它包括了标准的JPA annotation以及  Hibernate自身特殊功能的annotation。

  (2)hibernate-core是Hibernate的核心实现,提供了Hibernate所有的核心功能。

  (3)hibernate-entitymanager实现了标准的JPA,可以把它看成hibernate-core和JPA之间的适配器,它并不直接提供ORM的功能,而是对hibernate-core进行封装,使得Hibernate符合JPA的规范。

  总的来说,JPA是规范,Hibernate是框架,JPA是持久化规范,而Hibernate实现了JPA。

hibernate-entitymanager是为了提供jpa中所需要的entitymanager,现已将hibernate-entitymanager整合进hibernate-core

3.使用hibernate和jpa进行整合时,jap所必须的文件persistence.xml可以省略,而在org.springframework.orm.hibernate5.LocalSessionFactoryBean中进行实体类映射配置。具体如下

<bean id="sessionFactory"class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="configLocation" value="classpath:hibernate.cfg.xml"></property><property name="packagesToScan"><list><value>com.bochuang.entities</value></list></property></bean>

hibernate-entitymanager整合进hibernate-core之前jpa由entitymanager管理,现在由hibernate的session管理


3.两者的整合,其实就可以看成是hibernate集成了jpa,所以配置文件同hibernate 单独使用的配置文件,不用persistence.xml。而在dao层中,既能使用hibernate原有的查询方法,也可以使用hibernate实现了jpa规范的方法.其实现的jpa规范的方法和原有查询方法是并列的

4.实体类的@注解是jpa推出的

0 0