有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate还是应用服务器JPA?

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

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


共 (5) 个答案

  1. # 1 楼答案

    Hibernate is redundant in this collection and should be removed, am I right?

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

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

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

  2. # 2 楼答案

    我不知道OpenEJB是否有ORM提供程序,但假设没有,那就错了。JPA是一个API(代表Java持久性API),而不是一个实现。Hibernate有一个JPA的实现。例如,使用entityManager.persist时,请查看调用堆栈。这个JPA调用通过Hibernate实体管理器到达Hibernate核心。所以JPA需要休眠才能工作

  3. # 3 楼答案

    不,你还需要冬眠

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

  4. # 4 楼答案

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

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

  5. # 5 楼答案

    是的,如果你真的需要,一定要包括外部依赖。即使你想脱离JPA规范,也可以尝试使用EclipseLink,因为这是Glassfish附带的,也是JPA 2.0的参考IML