JPA和Hibernate有什么区别
1、1.规范和实现之间的区别只有一个JPA规范。但是,有许多不同的实现。各种项目,包括DataNucleus,TopLink,EclipseLink,OpenJPA和Hibernate,提供了JPA规范的实现。这些项目及其背后的供应商通过尝试提供更快,更高效,更易于部署,与更多外部系统集成以及可能具有比其他更少限制性许可的实施而竞争。Hibernate只是JPA规范的许多实现之一,尽管Java开发人员最常熟悉它。
2、2.JPA或Hibernate问题事实上,JPA与Hibernate的问题不是很好,因为这两个概念之间确实没有任何交叉性。你无法在性能,可扩展性或可靠性方面真正比较JPA和Hibernate,因为两者并没有真正在这些轴上竞争。JPA是规范。Hibernate是一个实现。没有组织需要在Hibernate和JPA之间进行选择。组织是否选择使用JPA。如果组织确实选择使用Java Persistence API与其关系数据库系统进行交互,则可以在各种实现之间进行选择,其中最受欢迎的是JBoss Hibernate项目。
3、3.为什么所有的Hibernate与JPA混淆?鉴于JPA和Hibernate履行了两个非常截然不同的角色,问题就出现了为什么在涉及这两个术语时会出现如此多的混淆。据我所知,混淆可追溯到JPA规范最初发布时。在2006年初始发布JPA 1.0之前,有许多供应商在对象关系映射(ORM)工具领域进行竞争,他们都拥有非常相似的API,可以实现许多相同的目标。但是,这些项目都没有兼容和可互换的代码。JPA的目标是标准化Java应用程序如何执行ORM。在JPA 1.0中,所有竞争实现都是统一的,因为它们现在都实现了一个通用的标准API。然而,由于Hibernate的普及,许多人在真正意味着JPA时继续使用Hibernate一词。Hibernate成为JPA的同名词,正如Kleenex是浴室纸巾的同名词一样。即使在今天,当开发人员和架构师谈论Hibernate时,他们实际上只是指JPA规范。
4、4.在JP钽吟篑瑜A和Hibernate之间进行选择没有人必须在JPA和Hibernate之间做出选择,因为Hibernate提供的所有功能拎枋辏话都可以通过JPA API轻松访问。但是,情况并非总是如此。在JPA发布的早期,实际上有一段时间,JPA和Hibernate之间的选择是组织必须做出的合理决定。最初的JPA版本非常基础,并没有包含当时Hibernate中提供的许多高级功能,包括Hibernate非常强大的Criteria API。当JPA首次发布时,许多组织同时使用JPA和Hibernate。开发人员会在其代码中调用专有的Hibernate API,例如HibernateSession,同时,他们会使用基于JPA的注释来装饰他们的JavaBeans和POJO,以简化Java代码与使用中的关系数据库之间的映射。在这样做时,组织利用标准API中的有用功能,同时可以访问尚未标准化的各种Hibernate功能。
5、5.Hibernate与JPA的优点即使在今天,也有可能在Hibernate框架中出现高级映射功能,这些功能尚未通过JPA规范提供。由于JPA受JCP和JSR流程的指导,因此添加新功能通常是一个缓慢且有条理的过程。但是,由于管理Hibernate项目的JBoss团队不受这些限制的约束,因此他们可以通过其专有API更快地提供功能。早在JPA规范出现之前,Hibernate实现的一些重要功能包括:Java 8日期和时间支持SQL片段映射不可变的实体类型实体过滤器SQL片段匹配手动冲洗模式二级缓存查询软删除但是,尽管Hibernate在引入新的和高级功能时通常更快,但JPA 2.0版本几乎缩小了两者之间的差距。当JPA规范几乎总是提供相同的功能时,任何软件开发人员都很难用专有API开发应用程序。如果需要其中一个高级Hibernate功能,您总是可以编写绕过JPA并直接调用Hibernate代码的代码,这完全消除了在JPA和Hibernate辩论中选择方面的需要。