Java 基于布尔标志在Hibernate中加载子实体
在Hibernate 3.6中,如果父实体中的布尔标志设置为Java 基于布尔标志在Hibernate中加载子实体,java,hibernate,hibernate-mapping,Java,Hibernate,Hibernate Mapping,在Hibernate 3.6中,如果父实体中的布尔标志设置为true,是否有办法仅加载子实体 例如: @Entity class Parent { @OneToOne private Child child; private boolean loadChild; } 因此,如果loadChild==false,则不应从db加载子项,并且始终为null,否则应加载它(当然,如果可用)。目前,孩子们正在急切地加载,保持这种状态会很好 基本上,我们要防止的是孩子的实际负载以及这可能会对性
true
,是否有办法仅加载子实体
例如:
@Entity
class Parent {
@OneToOne
private Child child;
private boolean loadChild;
}
因此,如果loadChild==false,则不应从db加载子项,并且始终为null,否则应加载它(当然,如果可用)。目前,孩子们正在急切地加载,保持这种状态会很好
基本上,我们要防止的是孩子的实际负载以及这可能会对性能产生的所有影响。加载它然后使用getter返回null是很容易的,但是如果加载一个实际上不需要的子级,这会影响性能。我不确定
JPA
和/或Hibernate
是否直接支持这一点。一种解决方法可以是:
向下移动loadChild
到Child
,然后在Parent
中使用
但是,在字段级别,@其中
仅适用于集合值属性。因此,您必须用集合
包装孩子,以便@在哪里
工作
@Where(clause = "load_with_parent = true") // lets say the column name is load_with_parent
@OneToMany
private List<Child> childs;
@Where(clause=“load\u with\u parent=true”)//假设列名为load\u with\u parent
@独身癖
私人名单儿童;
进一步阅读:
位于@其中
- 见本问题:
- 我不确定
JPA
和/或Hibernate
是否直接支持这一点。一种解决方法可以是:
向下移动loadChild
到Child
,然后在Parent
中使用
但是,在字段级别,@其中
仅适用于集合值属性。因此,您必须用集合
包装孩子,以便@在哪里
工作
@Where(clause = "load_with_parent = true") // lets say the column name is load_with_parent
@OneToMany
private List<Child> childs;
@Where(clause=“load\u with\u parent=true”)//假设列名为load\u with\u parent
@独身癖
私人名单儿童;
进一步阅读:
位于@其中
- 见本问题:
子项是否使用@OneToOne
关系关联?然后你可以让它急切地加载,等等。是的,它是OneTONE,目前正在急切地加载,如果可能的话,我们希望保持这种方式。那么到底是什么问题呢?它要么是在加载过程中初始化的(因为它是急切的),要么是空的(如果它不存在)。这与Hibernate有什么关系?另外,多一点上下文也会很有帮助,这样我们就不会遇到典型的X-Y问题了。我们使用Hibernate来管理这些实体。我不确定我还能在这里给出什么样的上下文。其实就是关于这个……好吧,这是一个如何在代码中使用的示例。另外,子项是否使用@OneToOne
关系关联?然后你可以让它急切地加载,等等。是的,它是OneTONE,目前正在急切地加载,如果可能的话,我们希望保持这种方式。那么到底是什么问题呢?要么是在加载过程中初始化的(因为它是急切的),要么是空的(如果它不存在)。不幸的是,这不是孩子的决定。孩子也可以被其他几十位家长所控制,他们都有自己的想法来决定是否加载它。我需要的是@WhereParent
,但不幸的是,我们只有@Where
和@WhereJoinTable
;-)不幸的是,这不是孩子的决定。孩子也可以被其他几十位家长所控制,他们都有自己的想法来决定是否加载它。我需要的是@WhereParent
,但不幸的是,我们只有@Where
和@WhereJoinTable
;-)