java - 如何在实体上维护过滤的子级
问题描述
我有三个表: Area Region Country
Area与 Region具有 OneToMany 关系, Region与Country具有 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 获取我需要的过滤区域/国家吗?
解决方案
如果您使用的是 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);
推荐阅读
- javascript - 图像处理/JavaScript
- javascript - 仅当数据是新的(不同于现有的)时才更新 Vuex
- reactjs - nodejs中如何通过mongoose连接mongodb
- javascript - Promise 中的状态更改后子组件不重新渲染..?
- linkedin - 使用 Spring social LinkedIn 时出现 410 错误
- html - 我似乎在某些页面的页脚中丢失了 CSS 代码
- oracle - Spring Boot 服务器无法启动嵌入式 tomcat 服务器
- python-3.x - 反转字符串,但不是整数
- pandas - 熊猫:什么是 dtype =
我有一张桌子,一列从csv加载为np.str。但是 dtype 说这个奇怪的 U64 (我猜意思是 unsigned int 64 位?)并且用 astype 转换不起作用。
stringIDs = extractedBatch.ID.astype(np.str) <
- c# - 跨线程操作无效:控件''从一个线程访问,而不是在窗口窗体中创建它的线程