Java Hibernate还是应用服务器JPA?

Java Hibernate还是应用服务器JPA?,java,hibernate,jpa,Java,Hibernate,Jpa,我在生产中使用Glassfish,在测试中使用OpenEJB。我正在使用JPA1.0。我使用的是Hibernate,但没有特定的Hibernate特性,只有标准的JPA Hibernate在此集合中是多余的,应该删除,对吗?是,如果确实需要,请始终包含外部依赖项。即使你想脱离JPA规范,也要尝试使用EclipseLink,因为这是Glassfish附带的,也是JPA 2.0的参考impl。我不知道OpenEJB是否有ORM提供程序,但假设没有,你是不对的。JPA是一个API(代表Java持久性A

我在生产中使用Glassfish,在测试中使用OpenEJB。我正在使用JPA1.0。我使用的是Hibernate,但没有特定的Hibernate特性,只有标准的JPA


Hibernate在此集合中是多余的,应该删除,对吗?

是,如果确实需要,请始终包含外部依赖项。即使你想脱离JPA规范,也要尝试使用EclipseLink,因为这是Glassfish附带的,也是JPA 2.0的参考impl。我不知道OpenEJB是否有ORM提供程序,但假设没有,你是不对的。JPA是一个API(代表Java持久性API),而不是一个实现。Hibernate有一个JPA的实现。例如,当您使用entityManager.persist时,请查看调用堆栈。这个JPA调用通过Hibernate实体管理器到达Hibernate核心。所以JPA需要Hibernate才能工作。

不,您仍然需要Hibernate


JPA只是一个API规范。您需要一些东西来提供该API的实现。OpenEJB不包括这一点;Glassfish包括一个名为EclipseLink的实现,但我认为它不如Hibernate好。

OpenEJB和Glassfish都提供了一个JPA实现。所以,为了运行您的应用程序,您不需要hibernate

但是,JPA实现可以而且确实在某些情况下表现不同。因此,如果您在测试期间没有使用相同的JPA实现运行您的应用程序,则无法100%保证您的应用程序在生产环境中正确运行

Hibernate在这个集合中是多余的,应该被删除,对吗

GlassFish 3使用EclipseLink作为默认的持久性提供程序(以防万一,请注意,如果需要,可以安装一个附加组件)。 作为默认的持久性提供程序

所以,如果您正在容器(嵌入式或非嵌入式)中运行所有JPA代码(包括测试),那么您就不会被迫在堆栈中保持Hibernate


实际上,无论您是否在容器中运行JPA代码,我的建议是在任何地方都使用目标平台的JPA实现(是的,理论上说您应该能够使用任何JPA实现,但实际上,您不希望在生产中遇到特定于提供商的错误,因为您使用的是另一个实现,所以在测试期间没有检测到该错误)。

据我所知,OpenEJB实现了JPA(),对吗?Hibernate是JPA 2.0的提供者之一,而不是JPA 2.0的参考实现。EclipseLink是参考实现。好吧,我没有写JPA 2.0,但我相应地更正了我的答案。JAP或JPA?????(很抱歉,问号太多了,但在允许发布评论之前,我必须有X个字符)这是不正确的,OpenEJB确实捆绑了一个JPA实现(OpenJPA),否则它将无法提供JPA和CMP持久性。