8

AFAIK,我一直在使用的最新最好的是 JPA 2.0。

我很困惑 GAE 有一个名为 appengine-java-sdk-1.6.5/lib/user/orm/geronimo-jpa_3.0_spec-1.1.1.jar 的 jar。我一直觉得 GAE 在采用与最新、最先进协议的兼容性方面总是存在延迟。他们花了一些时间来采用 JPA 2.0。

JPA 3.0 jar 在 GAE SDK 库中做了什么?有JPA 3.0这样的版本吗?谷歌这次是不是领先于其他所有人实施了新版本协议,从而超越了我们?我可以参考的地方是否有 JPA 3.0 规范或参考 impl?

我(目前)不是 EJB 人(抱歉......自从我 10 年前对 EJB 1.0 有不好的体验以来,我就决定避免使用 EJB)。

  • EJB 3.0 是 JPA 2.0 的同义词吗?
  • 还是 JPA 2.0 作为 EJB 3.0 的子集采用
  • 还是 JPA 3.0 = EJB 3.0?

WRT 我问的这个问题:从 Hibernate entitymanager 3.6.9 迁移到 4.1.2 crashed mysql connection,Hibernate entity-manager 4.x 是否与 JPA 3.0 或至少是晚于 2.0 的 JPA 版本相关?我遇到了 Hibernate entity-manager 3.x 和 4.x 之间的显着差异(并且到目前为止避免部署 4.x)。

我意识到这个问题相当令人困惑,可能我应该将每个项目都作为单独的问题提出,但我希望有人可以将所有这些结合在一个论文中:ejb 3、JPA 2/3、geronimo、休眠 ent-mgr 3/4。谢谢。

4

3 回答 3

7

正如其他人所说,JPA 2.0 是当前版本(Java EE 6 的一部分),下一个版本将是 JPA 2.1,目前正在规范中(JSR 338)并将包含在 Java EE 7 中。没有JPA 3 还没有,所以 JAR 的名字很糟糕。

JPA 1.0 是作为 Java EE 5 的一部分引入的,将持久性部分从 EJB 规范中分离出来(所以 Java EE 5 引入了 EJB 3.0 和 JPA 1.0,不再有实体 Bean,是的!)。Java EE 6 然后包括 EJB 3.1 和 JPA 2.0。

Java EE 7 将包括EJB 3.2和 JPA 2.1。

于 2012-06-06T07:37:32.403 回答
7

不,没有 JPA3 这样的东西(2012 年 6 月)。有 JPA1、JPA2 和(计划中的)JPA2.1。那个 geronimo-specs jar 实际上是用于 JPA1 的,但是一些非常短视的人/团体决定这样命名它,现在正在看到它的后果。

正如您所说,GAE 已经支持 JPA2,使用其 JPA 插件的 v2.x 可从 Maven 存储库或此处http://code.google.com/p/datanucleus-appengine/ 使用兼容的 jpa-api v2 jar(例如 geronimo-jpa_2.0_spec)。

于 2012-06-06T06:55:26.173 回答
1

自从我上次认真与 JPA 合作以来,事情可能已经发生了变化,所以我在这里说得更正了。但是,据我了解,JPA 2 是当前规范。我怀疑您提到的 jar 是 JPA 2 规范。2011 年,Geronimo 那时还没有开箱即用地支持 JPA 2。

就 EJB 和 JPA 而言:

  1. EJB 和 JPA 都基于 POJO(普通旧 Java 对象)。
  2. JPA 类本质上是一种数据访问层技术,即用于与数据层交互。
  3. EJB 本质上用于业务层。它将包含业务逻辑并协调不同 JPA 类之间的交互。例如,在 JPA 中,您可能有一个 Customer 类(与 Customer 表交互)和一个 Orders 类(与 Orders 表交互)。在您的 EJB 中,您将使用这两个类为特定客户创建新订单。

当使用 JPA 作为一种技术时,它允许您将数据库访问功能保持在一层。EJB、Web 应用程序(Servlets、JSP、JSF)、Web 服务甚至是 Swing 应用程序都可以使用这一层。这将使所有这些应用程序的数据库访问逻辑保持一致。然后,对数据库的更改将需要对 JPA 进行更改。

这是对差异的非常简化的解释,并且这个主题非常深入,但是这些要点应该可以帮助您区分两者。

顺便说一句,新的 EJB 规范确实使 bean 非常易于使用、开发和部署。我很幸运我错过了多年前的原始规范。目前,它们非常易于使用。

希望这有助于清除迷雾。

于 2012-06-06T07:26:16.323 回答