RDBMSとNoSqlの代替手段を切り替えることができるようにMongoDBをHibernateと統合する方法を示すリソースを探しています(できれば春の中から):誰かがこれを行った経験がありますか?
10 に答える
これを簡単に行うことはできません。Hibernateのポイントは、Javaオブジェクトをリレーショナルデータベースにマップすることです。Hibernateは多くの詳細を抽象化しますが、リレーショナルデータベースが外部キーや主キーなどとどのように連携するか、および実行するクエリのパフォーマンスへの影響を理解する必要があります。MongoDBには、列やテーブルではなくオブジェクトに焦点を当ててデータベースを設計するまったく異なる方法が必要です。MongoDBのHibernate方言を作成できる場合もありますが、リレーショナルデータベースとNoSqlデータベースの両方で機能するデザインを作成すると、両方でうまく機能しないデザインが得られます。
Hibernate OGMはどうですか?No-SQLデータベースにJPAを提供します。
Spring MongoTemplate(HibernateTemplateと同様)を使用すると、移行が容易になります。
その機能の中には、JPAアノテーションのサポートがあります(ただし、どの程度かはわかりません)。
詳細:http ://www.springsource.org/spring-data/mongodb
次のものが必要です。
- spring-data-mongodb JARをプロジェクトに追加します(Maven Centralで利用可能)。
- プロジェクトにmongo-java-driverJARを追加します(mavencentralで利用可能)。
- 提供されているMongoTemplateクラスを、HibernateTemplateと同様の方法で使用します。例えば:
mongoTemplate.findById(id, MyClass.class);
mongoTemplate.insert(myObject);
コードを使用した具体的な例を次に示します。use-spring-and-hibernate-with-mongodb
Javaを使用している場合は、HibernateOGMを使用できます。HibernateOGMはNoSQLデータベースのJavaPersistenceサポートを提供します。
以前に行われた素晴らしい作業があります:
- http://pragmaticintegrator.wordpress.com/2011/07/14/use-spring-and-hibernate-with-mongodb/
- http://pragmaticintegrator.wordpress.com/2011/07/27/unit-test-your-springhibernate-and-mongodb-setup/#comments
これらのリンクを参照してください。それはあなたに役立つでしょう。
また、JPAアノテーションを使用してオブジェクトをmongodbとの間で読み書きするkunderaもあります。Hibernateに精通している場合は、使用するのが非常に簡単なはずです。
私は最近、同じアプローチを採用しているが、独自の注釈を付けたMorphiaを試しました。それはうまくいきます
このブログがお役に立てば幸いです。http://drorbr.blogspot.com/2010/02/migrating-springhibernate-application.html ここで、Dror Bereznitskyは、sping/hibernateベースのソリューションをmongodbと統合する方法をうまく説明しています。
例を挙げると、私は何か似たようなことをしています。ColdFusionでは、Hibernateが統合されており、Hibernateオブジェクトを保存するには、EntitySave(Obj)を実行する必要があります。ただし、これまでに行ったことは、Ormオブジェクトをビルドしてから、mongoDB Coldfusionコンポーネントを使用し、mongo.Save(obj、collectionName)に移動してオブジェクトを保存することです。
Hibernateは必要な機能を提供すると思います。公式ウェブサイトにあるこれを見てください。1つのアプリケーションに複数のNoSQLデータストアを混在させる。たとえば、友情グラフにNeo4jを使用し、ブログ投稿にMongoDBを使用します。または、NoSQLとリレーショナルデータベースを組み合わせます。