JPA和JDO的区别是什么?

21

我想在Google App Engine上开发我的项目。我想使用Google Bigtable作为数据库。对于数据库,我有两个选项:JPA和JDO。你们能给我提供建议吗?两者对我来说都很新,我需要学习它们。所以在听取你们的回复后,我会专注于其中一个。

5个回答

12

由于您正在使用Data Nucleus,因此请参阅他们关于JDO和JPA的常见问题解答。 http://www.datanucleus.org/products/accessplatform_3_0/jdo_jpa_faq.html

DataNucleus AccessPlatform支持Java持久化的JDO和JPA规范。因此,它对这两项技术没有“利益关系”,认为用户可以选择最喜欢的那个。在网络上出现了很多关于JDO和JPA的FUD,这主要是由关系型数据库厂商散布的。本FAQ纠正了其中许多观点。


链接又挂了。 - Kalle Richter
1
更新的Datanucleus URL:https://www.datanucleus.org/products/accessplatform_4_1/persistence_api.html - Victor A

4

一个关键的区别是,JDO支持丰富的领域模型(将逻辑与数据结合在一起)。实际上,所有持久化类都可以引用当前的PersistenceManager,发出查询,并且可能默认情况下不需要将字段持久化。

JPA不支持这样的软件设计。实际上,每个实体都没有对PersistenceManager的引用,要想拥有它,必须使用ThreadLocal变量,这并不是一种非常优雅和健壮的解决方案。


3

由于 GAE BigTable 不是 RDBMS,因此 JDO 是更好的选择。在 Aphache JDO 中有一些详细的比较文章,这对我很有帮助。


2

JPA通过ORM将Java对象持久化到关系数据中,而JDO是用于Java对象持久化的更为通用的规范。因此,使用JDO将为您的对象提供更多的存储实现选项。


1
JPA是持久化的Java领先标准。因此,如果您使用RDBMS并需要ORM,则建议使用JPA。
Hibernate通常用作JPA实现。如果需要一些额外的功能,可以使用Hibernate特定的注释。

这个问题似乎已经在这里JDO vs JPA for Java on Google App Engine讨论过了。


但我想使用Data Nucleus操作Google Datastore(大表),那我应该遵循JPA还是JDO? - user246160
3
虽然Hibernate通常用作JPA实现,但它仅适用于关系型数据库(RDBMS),因此无法在GAE/J上使用。根据GAE/J的文档,JDO最接近该数据存储,尽管如果持久性模型简单且查询要求也简单,则同样可以使用JPA。使用JDO或JPA时,用户需要使用DataNucleus。 - DataNucleus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接