我正在使用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
感谢您的帮助!
答案 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