2016-05-05 3 views
0

Spring Data JPA @Query SQLクエリの短い宣言を書くのは非常に便利です。Spring Data JPAクエリ文字列の構成(非常に多くのフィールドまたはすべてのフィールドのクエリ)

public interface UserRepository extends JpaRepository<User, Long> { 

    @Query("select u from User u where u.firstname like %?1") 
    List<User> findByFirstnameEndsWith(String firstname); 
} 

もありQuery By Example

Person person = new Person();       
person.setLastname("Smith");       
Example<Person> example = Example.of(person); 
List<Person> results = personRepository.findAll(example); 

しかし、どのようなアプローチは、一般的なクエリー組成物に使用する必要がありますか? 多くのフィールドを使用している場合やフィールドに複数の値を使用している場合。

私はHSQLクエリ文字列を作成する前に、自然に感じましたが、 しかし、これをRepositoryに追加する良い方法はありません。これはJava Interface、botクラスです。

+0

たとえば、httpを参照してください:// stackoverflow.com/a/28679795およびhttp://stackoverflow.com/a/26450224/1356423 –

答えて

1

各シナリオのユースケースによっては、利用可能なものをすべて使用してください。私は単純なもの(@Query注釈なし)のクエリ名を使用し、より複雑な場合は@Query注釈を使用します。私は検索のためにQueryByExampleを使用し、最後に....

本当に必要な場合は、リポジトリの独自の実装あなたがそれが最良のアプローチだと思うなら、ここにあなた自身のHQLを書くことができます。それは休止状態の使用にあなたを結ぶだろうといくつかは、これを実行しないように教えてくれます(しかし、真剣に、あなたが実際にORMプロバイダを変更するのオッズは何ですか?)

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-implementations

0

実際には、第2の方法を使用する正当な理由は見当たりません。最初の方法は、明確な切り口で書いて理解することです。また、2番目の方法では、オブジェクトセットの値を作成し、リポジトリを呼び出して人を探し出す必要があります。オブジェクトに入力されたすべての値を見つけて処理を行う必要があります。代わりに、定義された列に対してのみ操作されるクエリを定義し、結果を提供します。したがって、最初の方法自体は2番目の方法よりも理にかなっています。

ありがとうございました。

0

クエリが単純な場合は十分です。それらが複雑かつ/または動的になるとき、いくつかの他のアプローチが必要である。

春のデータは、クエリの述語を指定する比較的簡単な方法である仕様APIを提供します。

より強力なアプローチはQuerydslです。タイプの安全性とコードの可読性が利点です。

関連する問題