JP QL — результат фильтрации в отношениях «один ко многим»

Я застрял, пытаясь создать запрос JPQL, и надеялся, что кто-то с большим опытом работы с JPA, чем мой, может помочь. Рассмотрим следующие две сущности:

class Author{
  String name
  @OneToMany(mappedBy="author")
  Set<Book> books
}

class Book{
  String title  
  Boolean inPrint
  @ManyToOne
  Author author
}

Если я хочу вернуть определенного автора (по имени) и быстро получить (т.е. LEFT JOIN FETCH) книги, для которых флаг Book.inPrint имеет значение true, как мне выразить это в JPQL?


person whistlenuts    schedule 19.08.2010    source источник


Ответы (1)


person    schedule
comment
Это вернет правильный список авторов, но для совпадающих авторов будут получены все книги, в том числе те, у которых inPrint = false. Hibernate с радостью выполнит вариант выборки соединения этого запроса, но это нарушение спецификации JPQL. Иногда достаточно изменить запрос: выберите b из книги b left join a.author a где ... таким образом вы получите только то, что хотите, но авторы с более чем одной подходящей книгой будут дублироваться. - person Jon Martin Solaas; 02.01.2012