Hibernate:如何在Set中查找对象

时间:2011-07-25 17:31:47

标签: java hibernate

我试图找出为以下场景编写HQL语句的最佳方法是:

我有一个类Book,它的一个属性是Set {Author}类型(实际上意味着在这里键入不等号)。类Author具有id,name等属性

现在我的DAO方法将“Set authors ”作为参数。对于这种方法,我想写一个HQL查询,这样我就可以获得至少有一个作者在作者中找到的所有书籍。

实现这一目标的最佳方法是什么?

注意类Book中的Set属性和传递给方法的Set参数可能包含多个作者。

谢谢!

修改

如果每本书只有一位作者,我本可以这样做:

FROM Book as book WHERE book.author IN (:authors)

但是,当每本书都有一组作者时,这不起作用。

3 个答案:

答案 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 >

然后,将每个查询的结果添加到主结果列表中。