2015-06-09 4 views
1

Так что я пытаюсь написать запрос Dsl запроса, который выглядит следующим образом:QueryDSL где отношения могут быть нулевыми

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); 

Но запрос не удается, потому что редактор иногда пустой. Как я могу выполнить этот запрос, чтобы он возвращал результаты для идентификатора автора, когда редактор имеет значение null?

Это надуманный пример, но это техническая проблема, которую мне нужно решить.

ответ

0

Только так я мог понять, как это сделать в том же 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); 
0

Вы также можете использовать левую присоединяется к этой

JPAQuery query = new JPAQUery(); 
QBook book = QBook.book; 
query.from(book) 
    .leftJoin(book.editor, editor) 
    .where(book.author.id.eq(personId).or(editor.id.eq(personId))) 
    .list(book);