私は最近、Java プロジェクトの永続化フレームワークを評価して選択しました。私の結果は次のとおりです。
私が見ているのは、JDOを支持するサポートは主に次のとおりです。
- SQL 以外のデータソース、db4o、hbase、ldap、bigtable、couchdb (cassandra のプラグイン) などを使用できます。
- SQL データソースから非 SQL データソースへ、またはその逆に簡単に切り替えることができます。
- プロキシ オブジェクトがないため、hashcode() および equals() の実装に関する問題が少ない
- POJO が増えるため、必要な回避策が少なくなります
- より多くの関係とフィールド タイプをサポート
JPAを支持するサポートは主に次のとおりです。
- より人気のある
- ジドは死んだ
- バイトコード拡張を使用しない
明らかに JDO/Datanucleus を使用していない JPA 開発者から、JDO を使用しないという弱い議論を提供している多くの JPA 支持の投稿を見ています。
また、JDO に移行し、結果として非常に満足している JDO ユーザーからの投稿もたくさん見ています。
JPA の人気が高まっているのは、技術的に優れているというよりも、RDBMS ベンダーのサポートによるものと思われます。(私には VHS/Betamax のように聞こえます)。
JDO とその参照実装である Datanucleus は、Google が GAE に採用し、ソース コード (http://sourceforge.net/projects/datanucleus/) で活発に開発されていることからもわかるように、明らかに死んでいません。
バイトコード拡張による JDO に関する苦情を数多く見てきましたが、JDO が悪い理由についての説明はまだありません。
実際、NoSQL ソリューションにますます夢中になっている世界では、JDO (およびデータニュークリアスの実装) の方がはるかに安全な賭けのようです。
JDO/Datanucleus を使い始めたばかりで、db4o と mysql の使用を簡単に切り替えられるようにセットアップしました。迅速な開発で db4o を使用すると便利です。DB スキーマについてあまり心配する必要はありません。スキーマが安定したら、データベースにデプロイします。また、後でアプリケーションのすべて/一部を GAE にデプロイしたり、あまりリファクタリングしなくても、分散ストレージ/マップリデュース a hbase /hadoop / cassandra を利用したりできると確信しています。
Datanucleus を使い始める際の最初のハードルが少し難しいことがわかりました。datanucleus の Web サイトのドキュメントは少しわかりにくいです。そうは言っても、最初の学習曲線を過ぎたら、API とマッピングに関するより詳細なドキュメントは非常に優れています。
The answer is, it depends what you want. I would rather have cleaner code, no-vendor-lock-in, more pojo-orientated, nosql options verses more-popular.
If you want the warm fussy feeling that you are doing the same as the majority of other developers/sheep, choose JPA/hibernate. If you want to lead in your field, test drive JDO/Datanucleus and make your own mind up.