所以我试图写一个查询dsl查询,看起来像这样:

    JPAQuery bookQuery = new JPAQuery();
    QBook qBook = QBook.book;
    bookQuery.from(qBook);

    BooleanBuilder predicates = new BooleanBuilder();
    predicates
            .or(qBook.author.id.eq(personId))
            .or(qBook.editor.id.eq(personId));

    bookQuery.where(predicates);


但是查询失败,因为编辑器有时为空。如何执行此查询,以便在Editor为null时返回与作者ID匹配的结果?

这是一个人为的示例,但这是我需要解决的技术问题。

最佳答案

我可以弄清楚如何在同一JPAQuery中做到这一点的唯一方法是使用子查询,如下所示:

JPAQuery bookQuery = new JPAQuery();
QBook qBook = QBook.book;
bookQuery.from(qBook);

BooleanBuilder predicates = new BooleanBuilder();
predicates
        .or(qBook.author.id.eq(personId))
        .or(qBook.in(
            new JPASubQuery()
                .from(qBook)
                .where(qBook.editor.id.eq(personId)
                .list(qBook)));

bookQuery.where(predicates);

10-05 23:41