0

我们有许多具有 Long 类型的 id 并存储在 MySql 中并使用 JPA/Hibernate 进行 ORM 的对象。将来我们将把一些移到 Mongo。为 Id 字段创建一个可嵌入类(例如 ContentId)并在整个系统中使用它来代替 Long 是否明智,这样当我们移动到没有 Long id 的 MongoDB 或另一个 noSql 数据库时,我们只需要更改内部表示ContentId 类。我只能找到将 @EmbeddedId 用于复合键的参考。这是明智的做法吗?当我们用 ObjectId 更改并替换 Long 时,我不想在一年左右的时间内完成所有代码。

4

2 回答 2

0

MongoDB 使用生成的 OID 作为默认 Id。您还可以使用 _id 属性定义自己的。OID 基本上是一个 UUID,它最好映射到一个字符串。我只会在 MySQL 中使用 UUID,因此您可以在任何一个上使用相同的模型。MongoDB 不支持复合 id,因此使用复合 id 可能不是一个好主意。

EclipseLink 在 MySQL 和 MongoDB 上都支持 JPA。EclipseLink 还支持与任何数据库一起使用的@UuidGenerator。

http://java-persistence-performance.blogspot.com/2012/04/eclipselink-jpa-supports-mongodb.html

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Advanced_JPA_Development/NoSQL

于 2012-06-28T14:16:27.293 回答
0

我看不到 EmbeddedId 会给您带来什么可移植性....最好关注可用的价值生成器以及数据存储将支持什么,并寻找如何在两个数据存储上都有可映射的内容以简化迁移。

DataNucleus JPA显然支持对 MongoDB 的持久性,并且已经有一段时间了,允许各种身份,无论是原生 MongoDB UUID(JPA 用语中的“身份”)、基于字符串的(uuid、uuid-hex)还是数字(“桌子”)。这提供了便携性,您可以选择最适合您的模型的东西。如果您也需要对其他数据存储的可移植性,它还支持对许多其他类型的数据存储(RDBMS、Excel、ODF、ODBMS、HBase、AppEngine、LDAP 等)的持久性。

于 2012-06-28T16:19:44.290 回答