jpa和hibernate的相似性和区别是什么。jpa和hibernate的相似性和区别
回答
JPA(Java持久性API)是持久性提供者实现的接口。 Hibernate就是JPA的一个这样的实现。
这是引入了JSR-000220的Enterprise JavaBeans 3.0最终发行的(持久性):
本文件是Java API的持久性和对象/厘清 周志武映射的管理规范使用Java EE和Java SE。这项工作的技术目标是为使用Java域模型的Java应用程序开发人员提供一个对象/关系映射工具,以便处理关系数据库。
此持久性API与本文档中定义的查询语言和对象/关系映射元数据一起需要在Enterprise JavaBeans 3.0下受支持。它也针对与Java SE一起独立使用。
整个Java社区的领先专家已经聚到一起构建了这个Java持久性标准。这项工作包含来自Hibernate,TopLink和JDO社区的贡献,以及来自EJB社区的贡献。
换句话说,JPA是用于持久性标准化 API。 Hibernate提供了标准的实现(即,在使用JPA时,它可以用作基础持久性引擎)。
在JPA之前,Hibernate是Java中对象持久化的一种事实标准。 Hibernate被认为是JPA的主要贡献者,因此它们之间有很多相似之处(我甚至可以说所有的ORM解决方案都是ORM概念的共同点)。但是,由于种种原因,政治或技术因素,JPA工作组无法在JPA的第一个版本中包含所有内容,所以JPA实际上是Hibernate的一个子集(这是一个简化视图,但实际情况非常接近)。 Hibernate和其他JPA实现因此提供了它们自己的专有扩展(这意味着非标准,即不能从一个提供者移植到另一个提供者)到您可能使用或不使用的JPA标准。
正如@Pascal Hibernate所指出的那样,Hibernate在JPA标准之前就已经存在(现在是JSR 317 JPA 2.0,Hibernate已经在3.5中实现了,以便早期使用)。所以还有其他的JPA提供者,例如Oracle TopLink,Apache OpenJPA。要在Hibernate中严格使用JPA,您必须使用EntityManager
与Session
相对应,这是Hibernate概念在JPA预约之前。同样,对于严格的JPA,您必须使用EntityManagerFactory
作为SessionFactory
。
EntityManager
和EntityManagerFactory
实际上分别是Session
和SessionFactory
的薄包装。另外,核心/注释Hibernate为JPA规范提供了扩展,使您的生活更轻松。在JPA 2 Hibernate之前有一个Criteria API,它允许您以OO方式编程构建查询。 JPA 2现在使这个功能成为标准 - JPA标准与Hibernate版本有点不同,因为它使用泛型。所以基本上Hibernate的功能是JPA的超集。
事实上,休眠有'Session',但是这是不是真的一个概念,它只是*工作单元*的一个实现,它是一个共享的ORM概念(Toplink具有'UnitOfWork',JDO具有'PersistenceManager',Hibernate具有'Session'')。 – 2009-11-23 23:17:28
这里的(Hibernate文档中摘录)对象之间的一些差异列表
实体。 Hibernate超越了JPA规范并提供了额外的配置。他们中的一些是在@ org.hibernate.annotations.Entity
- 的dynamicInsert/dynamicUpdate托管(默认为false)
- selectBeforeUpdate(默认为false)
- 多态性
- 留存
- optimisticLock(版本,全部,脏,无)
id作为使用组件类型的属性
- 虽然JPA不支持,Hibernate允许你直接把你的公会在嵌入式ID组件(而不必使用@MapsId注释)
多个ID属性,而无需标识符类型
- 另一种可以说更自然的方法是将@Id放置在实体的多个属性上。这种方法只支持Hibernate(不符合JPA),但不需要额外的可嵌入组件。
多个ID属性与专用标识符类型
- 虽然不是JPA规范,休眠让你声明的@IdClass
标识符生成
关联的属性香草- 包级别定义不支持JPA spe cification。但是,您可以在包级别
批注
- Hibernate注解支持一些未明确JPA规范支持使用@GenericGenerator。您可以使用@MappedSuperclass批注对嵌入对象进行批注,以使超类属性保持持久(请参阅@MappedSuperclass以获取更多信息)。
鉴别
- @ org.hibernate.annotations.DiscriminatorOptions允许有选择地指定休眠未在JPA标准化特定的识别选项。可用的选项包括力和插入
事务
- Hibernate提供更冲洗模式比在JPA说明书中描述的一个。特别是FlushMode.MANUAL用于长时间运行的对话。请参阅Hibernate核心参考文档以获取更多信息。
静态元模型
- 重要。 截至今天,JPA 2元模型不提供访问与物理模型相关的关系信息的任何设施。预计这将在未来版本的规范中得到解决。
- 1. JPA,EJB3和hibernate有什么区别?
- 2. JPA实体和Hibernate实体之间的区别
- 3. 在JPA(Hibernate)中注释字段和方法的区别?
- 4. Hibernate annotatons和JPA
- 5. Hibernate/JPA查询和类别问题
- 6. MVC和MVVM之间的区别和相似之处是什么?
- 7. jpa-store和hibernate OGM
- 8. JPA和JDO之间的区别?
- 9. 区别b/w Hibernate的Sessionfactory.getCurrentSession()和SessionFactory.openSession()
- 10. Hibernate中FlushMode.AUTO和FlushMode.ALWAYS的区别?
- 11. Hibernate模板和JDBC模板的区别
- 12. JPA和JDO规范有什么区别?
- 13. PostgreSQL,trigrams和相似性
- 14. 使用Tomcat和Hibernate和JPA的OpenEJB
- 15. JPA(Hibernate)列映射中的基本类和包装类有什么区别?
- 16. Spring-JPA和Spring-Data-JPA之间的区别
- 17. 在nltk中类似()和一致性的区别
- 18. Scala特性与Java 8接口之间有什么区别和相似之处?
- 19. JPA和Hibernate - “坚持操作”
- 20. Hibernate/JPA和PostgreSQL - 主键?
- 21. 加入3桌Hibernate和JPA
- 22. Oracle CLOB和JPA/Hibernate ORDER BY?
- 23. Spring,JPA和Hibernate - id generation
- 24. 闭包和咖喱的区别和可能的相似之处是什么?
- 25. .NET语言之间有什么区别和相似之处?
- 26. 依赖注入和JPA和Hibernate
- 27. hibernate会话和连接池之间的区别和关系?
- 28. 具有多个级别和表的JPA/Hibernate继承。
- 29. 接口类和抽象类有什么区别和相似之处?
- 30. Android中相机和Camera2的区别
可能重复:http://stackoverflow.com/questions/1503296/what-does-hibernate-toplink-offer-above-jpa – APC 2009-11-20 12:50:23