首页 > 解决方案 > 如何在实体上维护过滤的子级

问题描述

我有三个表: Area Region Country

AreaRegion具有 OneToMany 关系, RegionCountry具有 OneToMany 关系。

我需要建立一个只有确定国家的树。

示例:这是完整的树

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

我必须从国家 4-6-7 开始过滤这棵树,如下所示:

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

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

标签: javahibernatejpatree

解决方案


如果您使用的是 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 {
}

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

session.enableFilter("regionFilter")
session.getEnabledFilter("regionFilter").setParameter("countryId", value);

推荐阅读