9

私はSpring Repoに次のようなものを持っています:

findTop10ItemsByCategIdInOrderByInsertDateDesc(List ids)

挿入日順に並べられた ID リストのカテゴリ ID の最初の 10 項目が必要です。

別の同様のクエリ:

findTop10ItemsByDomainIdAndCategIdInOrderByInsertDateDesc(List ids, @Param Integer domainId)

ここでは、ドメイン ID が指定された param と等しく、categId が指定されたリストに含まれるようにします。

@Query を使用して解決できましたが、上記のクエリに 1 つのライナーがあるのだろうかと思います。

ありがとう

編集 トップは正常に動作します。最初は持っていましたfindTop10ItemsByDomainIdAndCategIdOrderByInsertDateDesc。ここで、カテゴリ ID のリストからの結果が必要です。それが新しい要件です。

2番目の編集 私のクエリは、ドメインIDが特定のパラメータと等しく、カテゴリIDが特定のリストに含まれているセットの結果を見つけるために機能します。しかし、HQL は setMaxResult のようなものを top または limit としてサポートしていないことがわかりました。

@Query("select i from Items i where i.domainId = :domainId and i.categId in :categoryIds order by i.insertDate desc")

このメソッドの(@Param("domainid") Integer domainid,List<Integer> categoryIds)パラメーターはありましたが、各パラメーターに @Param アノテーションを使用するか、@Param をまったく使用しないことを許可されているようです (Pageable return を除く; 私の場合ではありません)。

この考えを達成する方法はまだわかりません。フィールド a が param に等しい上位 n 要素、param のセット内のフィールド b を別のフィールドで並べ替えて抽出します。

ps: タグで申し訳ありませんが、spring-crudrepository はありません:)

4

1 に答える 1

9

問題を解決する方法は次のとおりです。

List<MyClass> findTop10ByDomainIdAndCategIdInOrderByInsertDateDesc(Long domainId, List<Long> ids);
  1. Top10結果を最初の 10 件に制限します。

  2. ByDomainId合格したものに結果を制限しますdomainId

  3. And別の制約を追加します。

  4. CategIdIncategId渡されたエントリに結果を制限しListます。

  5. OrderByInsertDateDescに制限する前に、挿入日の降順で結果を並べ替えますTOP10

次の例でこのクエリをテストしました。

List<User> findTop10ByEmailAndPropInOrderByIdDesc(String email, List<Long> props);

どこUserにある:

private Long id;
private String username;
private String password;
private String email;
private Long prop;

現在、Spring Data JPA を使用して日付を使用LocalDateまたは保存することをお勧めします。LocalDateTime

于 2017-09-28T17:42:48.487 に答える