如何在构建Predicate(s)时加入,但没有JPAQuery实例

Gau*_*eel 5 java querydsl

在为实体书构建谓词时,我希望能够在类别(ManyToMany)上保持连接以在类别上添加AND谓词.如果我有JPAQuery实例,我可以简单地实现:

if (catId != null) {
    jpaQuery.leftJoin(book.categories, category);
    jpaQuery.where(category.id.eq(catId).or(category.parentCategory.id.eq(catId)));
}
Run Code Online (Sandbox Code Playgroud)

但是在构建Predicates时我还没有JPAQuery.所以对于Predicate本身我可以这样做:

booleanBuilder.and(category.id.eq(this.categoryId).or(category.parentCategory.id.eq(this.categoryId)));
Run Code Online (Sandbox Code Playgroud)

但是对于leftjoin如何在没有jpaQuery实例的情况下继续进行?

Tim*_*per 1

您需要 Query 在 Querydsl 中声明左连接。如果这与 Spring Data 相关,他们可能会提出 API 级别的解决方案。

可以使用 book.categories.any() 代替category,但它的序列化方式与 JPQL 不同,使用子查询而不是联接。