0
私はクエリにいくつかの問題があります。私は与えられたidを持つCを持つBだけを持つクラスAを取得したいと思います。しかし、Aにも別のB.Cがある場合は、それもロードしています。存在する場合は、指定されたIDで負荷を強制する方法。JPQL WHERE "containsAll"
私はこのようにしてみてください、それは動作しませんclass A {
@OneToMany(mappedBy = "a", orphanRemoval = true)
private List<B> bList;
...
}
class B {
@ManyToOne
@JoinColumn(name = "aid", nullable = false)
private A a;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "cid", nullable = false)
private C c;
...
}
:
@Query(value = "SELECT a from A a inner join a.b b where b.c.id in :#{#param.cIdSet} GROUP BY a HAVING COUNT(DISTINCT b) = :size")
List<A> findByCustom(@Param("param") AParam aSearchParam);
今、私はこのように行うが、それはありません必要なエンティティの量をロード:
...
List<B> bList = bRepository.findByCustomQuery(aSearchParam);
Set<A> aSet = bList.stream()
.map(B::getA)
.collect(Collectors.toSet());
......
return aSet.stream()
.filter(it -> bList.containsAll(it.bList()))
.collect(Collectors.toList());
JPQLリファレンスまたはJPA仕様と同様に、無効なJPQLです。明らかにエラーメッセージを投稿すると、そのポストは意味のあるものになります。 –
ドミトリー以下の回答を受けたようですが、それは助けとなりましたか? – halfer
はい、私はそれをチェックしません。なぜなら、実際には今必要ではないからです。私は答えとして受け入れます。 Thx –