java - 根据布尔标志在 Hibernate 中加载子实体
问题描述
如果父实体中的布尔标志设置为,Hibernate 3.6 中是否有办法仅加载子实体true
?
例如:
@Entity
class Parent {
@OneToOne
private Child child;
private boolean loadChild;
}
因此,如果 loadChild == false,则不应从 db 加载子级并且始终为 null,否则应加载(当然,如果可用)。目前,孩子正在急切地加载,保持这种状态会很好。
基本上,我们在这里要防止的是孩子的实际加载以及这可能产生的所有性能影响。加载它然后使用 getter 返回 null 会很容易,但这会通过加载实际上不需要的子节点来影响性能。
解决方案
我不确定是否JPA
和/或Hibernate
直接支持这一点。一种解决方法可以是:
向下移动loadChild
到Child
,然后@Where
在 中使用Parent
。
但是,在字段级别,@Where
仅适用于集合值属性。所以你必须用Collection
for包裹孩子@Where
才能工作。
@Where(clause = "load_with_parent = true") // lets say the column name is load_with_parent
@OneToMany
private List<Child> childs;
延伸阅读:
@Where
在Hibernate 用户指南中请参阅这个 SO 问题:Hibernate @OneToOne mapping with a @Where 子句
推荐阅读
- cmake - 使用带有 CMAKE 的符号链接安装文件
- swift - 未显示键盘时调用 KeyboardDidShow
- mysql - 列出每个工作人员处理的财产数量
- docker - Docker 卷中的文件不会在文件更改时在 Windows 上刷新
- java - Eclipse程序无法连接MySQL数据库
- python - Python 正则表达式匹配电子邮件
- javascript - previoussibling 和 previouselementsibling-javascript 的区别
- xml - Blogger 中的面包屑导航不正确
- android - RecyclerView 上的 SetY() 对内部项目的工作很奇怪
- excel - 请求解释一行VBA代码