JPA与Hibernate
几乎所有的企业应用程序都需要定期访问关系数据库。但是早期技术(如JDBC)面临的一个问题是阻抗不匹配(面向对象技术和关系技术之间的差异)。通过引入一个名为Persistence layer的抽象层来解决这个问题,该层封装了来自业务逻辑的数据库访问。JPA(javapersistenceapi)是一个专门用于管理Java应用程序中的关系数据(使用持久层)的框架。在Java开发人员社区中有许多JPA的供应商实现。Hibernate是最流行的JPA实现(DataNucleus、EclipseLink和OpenJPA是其他一些实现)。最新的JPA版本(jpa2.0)完全受hibernate3.5的支持,hibernate3.5于2010年3月发布。
什么是JPA?
JPA是一个用于管理Java关系数据的框架。它可以与使用JSE(Java平台,标准版)或JEE(Java平台,企业版)的应用程序一起使用。它的当前版本是jpa2.0,发布于2009年12月10日。JPA取代了EJB2.0和EJB1.1实体bean(Java开发人员社区强烈批评这两个实体bean是重量级的)。尽管EJB中的实体bean提供了持久化对象,但是许多开发人员习惯于使用DAO(数据访问对象)和其他类似框架提供的相对轻量级的对象。因此,引入了JPA,它捕获了上面提到的框架的许多精巧的特性。
JPA中描述的持久性涵盖了API(定义见javax.持久性)关系对象所需的JPQL(Java平台,企业版)和元数据。持久化实体的状态通常持久化到表中。实体的实例对应于关系数据库表的行。元数据用于表示实体之间的关系。注释或单独的XML描述符文件(与应用程序一起部署)用于指定实体类中的元数据。JPQL类似于SQL查询,用于查询存储的实体。
什么是冬眠?
Hibernate是一个可用于Java编程语言的对象关系映射的框架。更具体地说,它是一个ORM(object-relational-mapping)库,可以用来将对象关系模型映射到传统的关系模型中。简单地说,它在关系数据库中的Java类和表之间,以及Java到SQL数据类型之间创建一个映射。Hibernate还可以通过生成SQL调用来查询和检索数据。因此,程序员不再需要手动处理结果集和转换对象。Hibernate是在GNU许可下发布的一个免费的开源框架。hibernate3.2及更高版本中提供了jpaapi的实现。加文·金是Hibernate的创始人。
JPA和Hibernate有什么区别?