所以我试图写一个查询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);