如何在实体上维护已过滤的子代

时间:2018-10-14 14:15:25

标签: java hibernate jpa tree

我有三个表: 区域 区域 国家

区域 Region 地区 国家/地区 具有一对多关系。

我只需要用确定的国家建造一棵树。

示例: 这是一棵完整的树

         0   -> Area
       / | \
      1  2  3  -> Region
    /  \ | / \
   4   5 6 7  8  -> Country

我必须从4-6-7国家开始过滤这棵树,像这样:

         0
       / | \
      1  2  3
    /    |  / 
   4     6 7  

gettig的jpql查询非常简单。但是不幸的是,当我对地区/国家使用getter方法时,他返回了所有地区/国家。有一种方法可以仅使用JPA获得我需要的过滤后的地区/国家/地区?

1 个答案:

答案 0 :(得分:0)

如果您使用的是Hibernate,则可以尝试使用过滤器。

Searches the map looking for the first element where the given function returns a Some value.

要在当前的Hibernate会话中启用过滤,您应该启用此过滤器并将必需的参数放入其中:

class Area {
    @OneToMany(...)
    @Filter(name = "regionFilter")  
    Set<Region> regions = new HashSet<Region>();
}

@FilterDef(name = "regionFilter", 
    defaultCondition = "country.id = :countryId",
    parameters = {@ParamDef(name = nameParameter, type = typeParameter)})
class Region {
}