目前ORM框架的产品非常多,包括Entity EJB、Hibernate、iBATIS、TopLink等,很多公司还开发了自己的ORM框架来解决公司项目的持久化。每种ORM框架都有自己的语法,它们之间不能直接通用,这样对不同项目的开发十分不利。因为许多持久层的操作都是类似的,实体操作的代码具有很大的可重用性,如果有种框架,能够提供不同ORM框架的统规范,就像JDBC能提供不同数据库的相同访问方式,那么对开发者来说无疑是十分有利的。
Sun公司为了简化现有Java EE和Java SE应用的对象持久化的开发工作,整合ORM技术,结束现在Hibernate、iBATIS、TopLink等ORM框架各自为营的局面,提出了新的JPA ORM规范。
1)JPA ORM规范
JPA作为Java EE 5.O平台标准的ORM规范,将得到所有Java EE服务器的支持。Sun这次吸取了之前EJB规范惨痛失败的经历,在充分吸收现有ORM框架的基础上,得到了个易于使用、伸缩性强的ORM JPA规范。
JPA由EJB 3.0软件专家组开发,作为JSR—220实现的部分。但它不属于EJB 3.0,它可以在Web应用甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化标准规范。由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。目前Hibernate 3.2、TopLink 10.1.3以及OpenJpa都提供了JPA的实现。
JPA通过JDK 5.0注解或XML描述对象—关系表的映射关系,并将运行期的实体对象持久化到数据库中。
2)JPA主要技术
JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体致。总的来说,JPA包括以下三方面的技术:
ORM映射元数据:JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
JPA持久化API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,将开发者从繁琐的JDBC和SQL代码中解脱出来。
查询语言:这是持久化操作中很重要的个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
3)JPA与Hibernate
JPA不是种新的ORM框架,它的出现只用于规范现有的ORM技术,使得目前流行的ORM框架可以实现互相移植的功能,而不是对它们的替代。相反,在采用JPA开发时,仍然将使用这些框架,只是对于不同框架的运用可以不修改任何代码,真正做到低耦合、可扩展程序设计。
Hibernate是流行的ORM框架之,也是早实现JPA的规范框架之。JPA与Hibernate相比的优点在于:JPA大量使用annotation语法,其XML使得配置简化,但不能解决同步。
JPA和Hibernate框架的关系可以看成是接口和实现的关系,但JPA只是Hibernate的个子集,因此Hibernate有些功能JPA并不能实现,如JPA不支持索引功能,没有缓存功能。因此在实际应用中两个框架可以结合使用,但凡是JPA能实现的功能都用JPA来完成,以此减少代码与Hibernate框架的耦合性。