首页 > 解决方案 > 根据布尔标志在 Hibernate 中加载子实体

问题描述

如果父实体中的布尔标志设置为,Hibernate 3.6 中是否有办法仅加载子实体true

例如:

@Entity
class Parent {
  @OneToOne
  private Child child;
  private boolean loadChild;
}

因此,如果 loadChild == false,则不应从 db 加载子级并且始终为 null,否则应加载(当然,如果可用)。目前,孩子正在急切地加载,保持这种状态会很好。

基本上,我们在这里要防止的是孩子的实际加载以及这可能产生的所有性能影响。加载它然后使用 getter 返回 null 会很容易,但这会通过加载实际上不需要的子节点来影响性能。

标签: javahibernatehibernate-mapping

解决方案


我不确定是否JPA和/或Hibernate直接支持这一点。一种解决方法可以是:

向下移动loadChildChild,然后@Where在 中使用Parent

但是,在字段级别,@Where仅适用于集合值属性。所以你必须用Collectionfor包裹孩子@Where才能工作。

@Where(clause = "load_with_parent = true") // lets say the column name is load_with_parent
@OneToMany
private List<Child> childs;


延伸阅读:


推荐阅读