2012-06-01 15 views
10

enter image description hereJak zrobić z HQL, wiele do wielu?

Oto moja struktura bazy danych. Relacja wiele do wielu. Chcę dokonać wyboru autorów, którzy napisali tę samą książkę. Z SQL, zrobiłem. Jak zrobić z HQL?

Query query = session.createSQLQuery("SELECT FirstName, LastName FROM authors, books, author_book as ab WHERE ab.authorID=authors.authorID AND ab.bookID = books.bookID AND ab.bookID = :id"); 
    query.setInteger("id", 1); 
    List list = query.list(); 
    Iterator<Object[]> iter = list.iterator(); 
    while (iter.hasNext()) { 
     Object[] obj = iter.next(); 
     System.out.println(obj[0] + " " + obj[1]); 
    } 

Odpowiedz

17

Zakładając nazwy podmiotu są Book and Autor i przypisują że książka twórcy:

select a.firstName, a.lastName from Book b join b.authors a where b.id = :id 
+0

Steve Ebersole - dziękuję bardzo !!! –

0

Weźmy podmiotów autorów książek i AuthorBook.

Czy możesz wypróbować następujące zapytanie.

String hql = "select a.firstName, a.lastName from Authors a, Books b, AuthorBook ab where ab.authorId=a.authorId and ab.bookId=b.bookId and ab.bookId=:id"; 

List<Object[]> resultList = session.createQuery(hql).setInteger("id", 1).list(); 

for(Object[] result : resultList) 
{ 

     System.out.println("First Name : " + result[0]); 
     System.out.println("Last Name : " + result[1]); 
}