繁体   English   中英

Hibernate或Application Server JPA?

[英]Hibernate or Application Server JPA?

我在生产中使用Glassfish,在测试中使用OpenEJB。 我正在使用JPA 1.0。 我正在使用Hibernate,但没有特定的Hibernate功能,只是标准的JPA。

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

如果您确实需要,则始终包含外部依赖项。 即使您想要退出JPA规范,然后尝试使用EclipseLink,因为这是与Glassfish捆绑在一起的,也是JPA 2.0的参考impl

不,你还需要Hibernate。

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

OpenEJB和Glassfish都提供了JPA实现。 因此,为了运行您的应用程序,您不需要休眠。

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

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

GlassFish 3使用EclipseLink作为默认持久性提供程序(以防万一,请注意,如果需要,可以在GlassFish上安装附加组件以将Hibernate用作JPA提供程序 )。 OpenEJB将OpenJPA捆绑为默认持久性提供程序。

因此,如果您在容器中运行所有JPA代码(包括测试)(嵌入或不嵌入),那么您不必强制将Hibernate保留在堆栈中。

实际上,无论你是否在容器中运行JPA代码,我的建议是在任何地方使用目标平台的JPA实现(是的,理论上说你应该能够使用任何JPA实现,但在实践中,您不希望面对生产中特定于提供程序的错误,因为您正在使用其他实现,因此您在测试期间未检测到该错误。

我不知道OpenEJB是否有ORM提供者,但假设它没有你不对。 JPA是一个API(代表Java Persistence API)而不是实现。 Hibernate有一个JPA实现。 例如,使用entityManager.persist时,请查看调用堆栈。 这个JPA调用通过Hibernate-Entity Manager进入Hibernate核心。 所以你需要Hibernate for JPA才能工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM