代码之家  ›  专栏  ›  技术社区  ›  Innet

如何在实体上维护已筛选的子级

  •  0
  • Innet  · 技术社区  · 6 年前

    面积 地区

    面积 和一个女人有关系 地区 地区 与…有一对多的关系 国家 .

    我要造一棵树,只有坚定的国家。

    例子: 这是整棵树

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

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

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Dmitry Chuiko    6 年前

    如果您使用的是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.enableFilter("regionFilter")
    session.getEnabledFilter("regionFilter").setParameter("countryId", value);