2012-06-28 23 views
0

我們有許多對象具有Long類型的ID,並存儲在MySql中,並使用JPA/Hibernate for ORM。我們將來會把一些東西搬到Mongo。爲Id字段創建可嵌入的類是明智的,例如ContentId並在整個系統中使用它來代替Long,這樣當我們移動到MongoDB或沒有Long ID的anoSql數據庫時,我們只需更改ContentId類的內部表示。我只能找到對複合鍵使用@EmbeddedId的引用。這是明智的做法嗎?當我們改變並用ObjectId替換Long時,我不希望在一年左右時間內通過所有的代碼。嵌入ID是從jpa移動到mongo的正確方式

回答

0

MongoDB使用生成的OID作爲默認Id。你也可以使用_id屬性定義你自己的。 OID基本上是一個UUID,它最好映射到一個String。我只是在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

0

我看不出有什麼EmbeddedId會給你獲得可移植性....最好是專注於提供的價值發電機和哪些數據存儲會支持,並尋求如何您可以在兩個數據存儲上都有可映射的東西來緩解遷移。無論是本地MongoDB UUID(JPA說法中的「身份」),基於字符串的(uuid,uuid-hex)還是使用基於字符串的(uuid,uuid-hex),都可以使用全部的身份標識。數字(「表格」)。這提供了便攜性,您可以選擇最適合您的模型的設備。它也支持其他類型的數據存儲(RDBMS,Excel,ODF,ODBMS,HBase,AppEngine,LDAP等)的持久性,如果您還需要其他數據存儲的便攜性。

相關問題