2017-11-06 25 views
0

私はJava Spring Frameworkの初心者ですが、このタイトルはあまりにも具体的ですが、この質問に対する答えは、同様の多対多のスキーマに役立ちます。私はこの答えのために多くを捜し、何も見つけませんでした。 Please: downvoteの前に全身を読むか、他の質問に関連してください。Spring JPA RepositoryクラスのManyToMany製品スキーマで「findByCategory」を実行する方法は?

は、私は、エンティティProductCategoryを持っており、それらはrun-timemany-to-manyに関連して生成されます。そのスキーマ使用しています私は、3つの重要なend-pointsを持っている私のRESTアプリケーションで

:メニューとしてすべてのカテゴリを一覧表示する

  1. /categoryを。
  2. /products?description=説明フィールドに用語でフィルタリングされた製品を一覧表示する。
  3. /category/{id}/productsこのカテゴリーの商品を一覧表示する

私は私がjoinwhereが仕事を得るために作るために@Query注釈を使用する必要があることを言われたように私は、この最後の1では困難であります。しかし、私はSpring JPAのエンジニアがJPA Way の外でこのような共通タスクを残すことができないと考えています。

@Query("select * from products p left join p.category c where c = ?1") 
public List<Produto> findByOrderByDescriptionAsc(Lond idCategory) 

ことができます。私はそれのようでなければなりませんと言われました

public Page<Produto> findByDescriptionIgnoreCaseContainingOrderByDescriptionAsc(String description, Pageable pageOptions); 

最後のエンドポイント:

第二のエンドポイントは、そのリポジトリでこのメソッドを持っていますIこの検索をlistByCategory(a way to get only one category)なしで実行します。 @Queryアノテーションを使用する必要がありますか?はい、どうですか?

+0

を取得したい場合は、すべての製品のBU区分

List<Product> findByCategoriesIdOrderByDescriptionAsc(long categoryId) 

OR を取得したい場合*のみ1つのカテゴリ*を取得する方法ことができますそれは最初かもしれない? –

+0

私は、製品がユーザーがそれを置くのと同じくらい多くのカテゴリーにあることを意味しました。ですから、URL /カテゴリ/ id/productsで渡されたカテゴリ** id **にある製品を見つけるためにリポジトリが必要です。 – PSyLoCKe

+0

'findByOrderByDescriptionAsc'で' @ Query'を使うのではなく、 'findByDescriptionIgnoreCaseContainingOrderByDescriptionAsc'のようなクエリメソッドを使うだけです。 –

答えて

1

あなたは、あなたが何を意味した1つのレコードのみ

Product findFirstByCategoriesIdOrderByDescriptionAsc(long categoryId) 
+0

Tipuさん、ありがとうございました。あなたの答えはSpringリポジトリエンジンによって受け入れられました。 – PSyLoCKe

+0

このアプローチには問題がありました。結果のクエリは 'join'を使用せず、3つのテーブルすべてを追加するだけです。非常に不便です。 – PSyLoCKe

+0

エンティティを投稿し、ログからクエリを選択してください。私の場合は参加を追加しています – Musaddique

関連する問題