JPA vs冬眠
几乎所有的企业应用程序都需要定期访问关系数据库。但早期技术(如JDBC)面临的一个问题是阻抗不匹配(面向对象和关系技术之间的差异)。这一问题的解决方案是通过引入一种称为持久性层的抽象层来实现的,该抽象层封装了来自业务逻辑的数据库访问。JPA (Java Persistence API)是一个专门用于管理Java应用程序中的关系数据(使用持久性层)的框架。在Java开发人员社区中使用了许多JPA的供应商实现。Hibernate是最流行的JPA实现(DataNucleus, EclipseLink和OpenJPA是其他一些)。最新的JPA版本(JPA 2.0)完全由Hibernate 3.5支持,它于2010年3月发布。
JPA是什么?
JPA是一个用于管理Java关系数据的框架。它可以与利用JSE (Java平台,标准版)或JEE (Java平台,企业版)的应用程序一起使用。它的当前版本是JPA 2.0,于2009年12月10日发布。JPA取代了EJB 2.0和EJB 1.1实体bean(它们被Java开发人员社区严重批评为重量级)。尽管实体bean(在EJB中)提供了持久性对象,但许多开发人员习惯于利用DAO(数据访问对象)和其他类似框架提供的相对轻量级的对象。因此,JPA被引入,并且它捕获了上面提到的框架的许多整洁的特性。
JPA中所描述的持久性涵盖了API(在javax.persistence中定义)、JPQL (Java平台,企业版)和关系对象所需的元数据。持久性实体的状态通常持久化到表中。实体的实例对应于关系数据库表的行。元数据用来表示实体之间的关系。注释或单独的XML描述符文件(与应用程序一起部署)用于在实体类中指定元数据。JPQL类似于SQL查询,用于查询存储的实体。
Hibernate是什么?
Hibernate是一个可以用于面向Java编程语言的对象-关系映射的框架。更具体地说,它是一个ORM(对象-关系映射)库,可以用来将对象-关系模型映射到传统的关系模型中。简单地说,它在关系数据库中的Java类和表之间创建映射,也在Java到SQL数据类型之间创建映射。Hibernate还可以通过生成SQL调用来进行数据查询和检索。因此,程序员可以从手工处理结果集和转换对象的过程中解脱出来。Hibernate是作为GNU许可下发布的免费开源框架发布的。JPA API的实现在Hibernate 3.2和更高版本中提供。Gavin King是Hibernate的创始人。
JPA和Hibernate之间的区别是什么?
JPA是一个在Java应用程序中管理关系数据的框架,而Hibernate是JPA的一个特定实现(所以理想情况下,JPA和Hibernate不能直接比较)。换句话说,Hibernate是实现JPA的最流行的框架之一。Hibernate通过Hibernate Annotation和EntityManager库实现JPA,这些库是在Hibernate Core库之上实现的。EntityManager和Annotations都遵循Hibernate的生命周期。最新的JPA版本(JPA 2.0)完全由Hibernate 3.5支持。JPA的好处是有一个标准化的接口,因此开发人员社区将比Hibernate更熟悉它。另一方面,原生Hibernate api可以被认为更强大,因为它的特性是JPA的超集。
HOUSSEM扎伊说
好stuf