2012-04-03 4 views
2

에 의해 엔티티 내가 Hibernate 엔티티가 세트가 사용자을, 이름이 찾을 <Book>HQL 수집

예약문자열은 bookname을 가진 또 다른 엔티티이다;

정확한 서적 목록을 보유한 모든 사용자를 찾고 싶습니다. 예 :

List<Book> booksList = Arrays.AsList(
          getBook("Tom Sawyer"), getBook("Christmas Carol")); 

List<Book> usersHavingThoseBooks = getCurrentSession() 
     .createQuery("from Users u inner join u.books b where b in (:booksList)") 
     .setParameterList("booksList", booksList) 
     .list(); 

그러나 해결책은 아닙니다. 나는 이드의 이드에 대해 질의를 시도했다. 더 나은 것처럼 보이지만 나에게주지 않는다. 사용자는 정확히 세트를 가진 사용자이다.

  • 사용자 (ID = 1, 책 = { "톰 소여", "크리스마스 캐롤"})
  • 사용자 (ID = 2, 책 = { "톰 : 나는 데이터베이스에 다음 사용자가있는 경우 (id = 3, books = { "톰 소여", "크리스마스 캐롤", "이상한 나라의 앨리스")
  • 사용자 (ID = 4, books = { "Alice in wonderland", "Sql for dummies"})

IN 절은 사용자 1, 2, 3을 반환하지만 사용자 1은 "Tom sawyer" 및 "크리스마스 캐롤".

내가 필요로하는 두 번째 질문은 이상의 사용자가 적어도 명의 사용자가 매개 변수로 제공하는 목록에있는 것입니다. 예 : 'Tom Sawyer'와 'Christmas Carol'이라는 두 권의 책과 두 권의 책 (하나 이상의 책)을 가지고있는 모든 사용자를 더한 모든 사용자 ...

아무도이 두 가지 쿼리를 수행하는 방법을 알고 있습니까? 감사합니다.

답변

0

이 시도 :

select u from Users u left join u.books b where b in (:booksList)

+0

감사하지만,이 중 하나가 작동하지 않는, 내가 가지고있는 문제는 'IN'절은 저를 전송하는 모든 적어도 책 중 하나, 그리고를 가진 모든 사용자 나는 매개 변수에서 전달하는 책들. – Aurelien