JPA 和 JDO 规范有啥区别?

Posted

技术标签:

【中文标题】JPA 和 JDO 规范有啥区别?【英文标题】:Whats the difference between JPA and JDO specifications?JPA 和 JDO 规范有什么区别? 【发布时间】:2010-12-25 03:11:15 【问题描述】:

我一直在使用 Hibernate ORM,它是 JPA 规范的实现,用于管理关系数据。我还听说过 JDO 规范应该做同样的事情(管理关系数据)。

两者之间的根本区别是什么? 最受赞赏的任何代码示例。 JDO 如何与其他 Java 技术栈集成,例如EJB3?

【问题讨论】:

相关:***.com/questions/530215/… @matt - 从你的问题来看,我没有看到任何给出差异的答案。你问了优缺点,我打算在了解两种规范之间的差异后进行评估。 【参考方案1】:

试试这些 JDO-JPA FAQ, JDO or JPA, JDO .v. JPA, JDO .v. JPA - API, JDO .v. JPA - ORM

JDO 早在 JPA 之前就已经存在,而且范围更广。 JPA 仅用于 RDBMS,并且(即使在 JPA2 中)不提供 JDO 提供的全部支持。此论坛中的链接和其他帖子应提供充足的阅读材料来解释论点的各个方面。

--安迪 (DataNucleus)

【讨论】:

关于如何将 JDO 与其他堆栈集成的任何指针,例如EJB3 JDO 实现(例如 DataNucleus)带有 JCA 适配器,所以它很简单 很好的答案,但是,仅供参考,前两个链接已失效。 他们在 3 年前回答时没有回答。但是您可以轻松地将 URL 中的“accessplatform_2_0”替换为“accessplatform_3_0”;现在更新了,谢谢【参考方案2】:

JPA 被定义为统一和替换以前存在的 EJB CMP 和 JDO 的 Java 持久性规范。 JPA 是作为 EJB 3.0 的一部分发布的,并且是 Oracle WebLogic、IBM Websphere、Redhat JBoss 和任何其他 Java EE 提供商支持的 Java EE 规范的一部分。

支持 JPA 的领先产品有很多(TopLink/EclipseLink、Hibernate、OpenJPA、DataNucleus),但支持 JDO 或 CMP 的产品很少,甚至没有。因此,JPA 似乎在替换两者方面做得很好。

至于 JPA 只是 RDBMS,那是完全错误的,(即使是我所知道的唯一剩下的 JDO 产品 DataNucleus,在它支持 JDO 的任何非关系平台上都支持 JPA)。

还有很多其他产品在非关系平台上支持 JPA,例如 EclipseLink 的 NoSQL 和 EIS 支持(MongoDB、Oracle NoSQL、XML、遗留数据库)、Kundera、DataNucleus,甚至对象数据库如 ObjectDB 也支持 JPA 作为他们的 Java API。

【讨论】:

GAE 似乎是一个关键的 JDO 支持平台。我不知道这与 DataNucleus 有多么不同,但我已经看到了这里的问题…… JPA 专家组中有多少非 RDBMS 数据存储供应商的代表?这将表明它是如何适合非 RDBMS 数据存储的。 这些其他数据存储不使用 JDBC,但 JPA 是围绕它的,没有真正的方式通过标准 JPA 方式提供对数据存储的访问; DataNucleus 似乎通过 jdbc.url 破解了它。因此,不,我看不到您声称的“JPA”如何满足其他数据存储的需求。 DataNucleus 是否应该为它们提供 JPA 也是有争议的。

以上是关于JPA 和 JDO 规范有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate 和 JPA 有啥区别?

JPA 和 Hibernate 中的 persist() 和 merge() 有啥区别?

JPA 2.0 中的会话和事务有啥区别?

使用JPA和Hibernate时JOIN和JOIN FETCH有啥区别

使用 JPA 时,@Entity 和 @Table 中的 name 参数有啥区别?

使用 Spring Data JPA 的 JpaRepository 和 CrudRepository 之间到底有啥区别? [复制]