HQL查询非标准的ManyToMany关系

时间:2012-05-15 14:38:59

标签: java hibernate jpa hql

作者图书之间存在ManyToMany关系。
表:作者
id |名称

表: ASSIGN
* id | author_id | book_id *

表: BOOK
id |标题

但我使用的不是标准的ManyToMany映射,我正在使用下一个

class Book
{
   @Id
   long id;

   String title;

   @OneToMany
   List<Assign> authors;
}

class Assign
{
   @Id
   long id;

   @ManyToOne
   Book book

   @ManyToOne
   Author author;
}

class Author
{
   @Id
   long id;

   String name;

   @OneToMany
   List<Assign> books;
}  

获取作者姓名所有图书的查询是什么?还有什么查询来获取作者姓名的所有书名?

2 个答案:

答案 0 :(得分:1)

您只有两个OneToMany关联。您只需在查询中使用联接,如Hibernate documentation over HQL

中所述
select book from Author author 
left join author.books assign
left join assign.book book
where author.name = :name

第二个查询是相同的,除了你只想要书名:

select book.name from Author author ...

旁注:您不应该将自己的分配booksauthors命名为:这非常令人困惑。将其命名为assigns

答案 1 :(得分:0)

什么是获取作者姓名所有图书的查询?

来自b.authors.author.name

的Book b order

什么是查询以获取作者姓名的所有图书名称?

通过b.authors.author.name

从Book b order中选择b.title

您是否在作者和图书课程中交换了标题和名称?