spring-dataとmongodbを使用して複雑なクエリを実行できるアプリケーションを作成する必要があります。私はMongoRepositoryを使って始めましたが、複雑なクエリで苦労して例を見つけたり、構文を実際に理解したりしました。Spring DataのMongoTemplateとMongoRepositoryの違いは何ですか?
私はこのようなクエリについて話している:
@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
List<User> findByEmailOrLastName(String email, String lastName);
}
または私は構文権利を得ることはありませんので、私は試行錯誤してみましたJSONベースのクエリを使用します。 mongodbのドキュメントを読んだ後でさえ(構文が間違っているために動作していない例)。
@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
@Query("'$or':[{'firstName':{'$regex':?0,'$options':'i'}},{'lastName':{'$regex':?0,'$options':'i'}}]")
List<User> findByEmailOrFirstnameOrLastnameLike(String searchText);
}
すべてのドキュメントを読ん後は、mongoTemplate
がはるかに良い、その後MongoRepository
文書化されているようです。私は、次のマニュアルを参照しています:
http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/reference.html
あなたが使用する方が便利で強力な何であるかを教えてもらえますか? mongoTemplate
またはMongoRepository
?どちらも成熟しているのですか?
こんにちはオリバー、これは実際には動作しません。 spring-dataは、カスタム名からクエリを自動生成しようとします。 yourCustomMethod()。 "あなたの"はドメインクラスの有効なフィールドではないと言います。私はマニュアルを守り、spring-data-jpa-examplesのやり方を二重にチェックしました。運がない。カスタムインターフェイスをリポジトリクラスに拡張すると、spring-dataは常に自動生成を試みます。唯一の違いは、私がMongoRepositoryを使用していて、CrudRepositoryを使用していないことです。なぜなら、今のところIteratorで作業したくないからです。あなたがヒントを持っていればそれは高く評価されるでしょう。 –
最も一般的な間違いは、実装クラスに間違った名前を付けることです:ベースリポジトリのインターフェイスが 'YourRepository'と呼ばれる場合、実装クラスの名前は' YourRepositoryImpl'にする必要があります。それは事実ですか?もしそうなら、私はGitHubなどのサンプルプロジェクトを見てうれしく思います... –
こんにちはオリバー、Implクラスはあなたが仮定したように間違った名前が付けられました。私は名前を調整し、それは今働いているように見えます。あなたのフィードバックに感謝します。このように異なる種類のクエリオプションを使用できるようにするのは本当に涼しいです。よく考えました! –