2012-06-01 31 views
10

enter image description hereLàm cách nào để thực hiện với HQL, nhiều đến nhiều?

Đây là cấu trúc cơ sở dữ liệu của tôi. Quan hệ rất nhiều. Tôi muốn thực hiện một lựa chọn các tác giả đã viết cùng một cuốn sách. Với SQL, tôi đã làm. Làm thế nào để tôi làm với 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]); 
    } 

Trả lời

17

Giả sử các tên thực thể là Sách và Tác giả và thuộc tính mà Sách có tác giả:

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

Steve Ebersole - cảm ơn bạn rất nhiều !!! –

0

Chúng ta hãy lấy các thực thể tác giả, Sách và AuthorBook.

Bạn có thể thử truy vấn sau đây không.

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]); 
} 
Các vấn đề liên quan