16

ここに画像の説明を入力

これが私のデータベース構造です。多対多の関係。同じ本を書いた著者を選びたい。SQLで、私はそうしました。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]);
    }
4

2 に答える 2

29

エンティティ名がBookとAuthorであり、Bookにauthors属性があると仮定します。

select a.firstName, a.lastName from Book b join b.authors a where b.id = :id
于 2012-06-01T22:13:52.133 に答える
1

Authors、Books、AuthorBookのエンティティを取り上げましょう。

次のクエリを試してみてください。

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]);
}
于 2012-06-02T10:05:23.087 に答える