Hibernate:使用过滤的子集合获取整个层次结构

时间:2015-10-13 15:41:25

标签: hibernate hql

我正在使用hibernate并希望获得用户的整个层次结构 - >帖子 - >评论,但只有具有"状态"的评论。为真。

我尝试过这样的事情:

Select user from User user join user.posts post join post.comments comment where comment.status = true

但是这给了我一个爆炸的用户爆发的状态为真的评论数量,在单个用户 - >帖子中,我所有的评论,不仅仅是状态为真的评论。

我也尝试过" left join"或者"内部联接"但我得到了相同的结果。

有没有办法得到我想要的东西?而且是#34;清洁工"这样做的方法?

以下是类结构的一个小例子:

Class User
 List<Post> posts

Class Post
 List<Comment> comments

Class Comment
 String text
 boolean status

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为你想要做的是使用 @FilterJoinTable 注释来过滤集合:

@FilterJoinTable(name="activeComments", condition="status = :status")
List<Comment> comments

您需要在类级别声明过滤器:

@FilterDef(name="activeComments", parameters={
    @ParamDef( name="status", type="boolean" )
})

并从会话中启用它:

    Filter filter = session.enableFilter("activeComments");
    filter.setParameter("status", true);

这是一个关于Hibernate过滤的教程,有以下示例: http://www.concretepage.com/hibernate/hibernate-filter-and-filterjointable-annotation-example

...和官方的Hibernate 3文档: https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/filters.html