过滤JPA eager fetch实体

时间:2014-08-15 07:12:18

标签: java hibernate jpa

我有一堆名为Nodes的JPA entites(女巫Hibernate),其中包含以下字段:

  • 的NodeId
  • ParentNodeId
  • 有效

ParentNodeId引用另一个Node,因此我有一个很好的树结构。

我已经将获取类型的Node设置为eager,因此我获得了树中的所有元素。

我想要做的是通过 Active 属性过滤树,即只获取那些 Active 字段设置为1的节点。 / p>

有一种简单的方法吗?

感谢, krisy

1 个答案:

答案 0 :(得分:3)

您可以使用hibernate filter

  1. 在实体类级别定义@FilterDef

    @Entity
    @FilterDef (name="nodeFilter", 
                parameters = @ParamDef( name="activeParam", type="integer" ))
    
  2. 然后在所需属性(属性级别或类级别)上定义@Filter

    @Filter(name = "nodeFilter", condition = "active = :activeParam") 
    
  3. 最后启用过滤器随时随地(例如findAllNodes())

    Filter filter = session.enableFilter("nodeFilter");
    filter.setParameter("activeParam", 1);  //e.g Active is 1
    //then retrieve the result from session
    
  4. 更多参考资料:link1link2link3