我试图找出为以下场景编写HQL语句的最佳方法是:
我有一个类Book,它的一个属性是Set {Author}类型(实际上意味着在这里键入不等号)。类Author具有id,name等属性
现在我的DAO方法将“Set authors ”作为参数。对于这种方法,我想写一个HQL查询,这样我就可以获得至少有一个作者在作者中找到的所有书籍。
实现这一目标的最佳方法是什么?
注意类Book中的Set属性和传递给方法的Set参数可能包含多个作者。
谢谢!
修改
如果每本书只有一位作者,我本可以这样做:
FROM Book as book WHERE book.author IN (:authors)
但是,当每本书都有一组作者时,这不起作用。
答案 0 :(得分:1)
你试过吗
select distinct b from Book b join b.authors a where a in (:authors)
请注意,如果您需要join fetch
,则应单独指定:
select distinct b from Book b join b.authors a left join fetch b.authors
where a in (:authors)
答案 1 :(得分:0)
是否有一个特殊原因导致您不想使用Hibernate的Criteria来执行此操作?
Set<Author> authors = [ your set of Author Objects ]
Criteria crit = createCriteria(Book.class)
.add( Restrictions.in( "author", authors ) );
List<Book> books = crit.list();
答案 2 :(得分:-1)
您必须通过作为参数传递的作者进行一次hql查询。
对于每位作者,HQL将如下所示:
from Book as book
join book.authors author
where author = < one_of_my_author_passed_as_parameter >
然后,将每个查询的结果添加到主结果列表中。