【发布时间】:2017-12-06 12:16:48
【问题描述】:
我有 A 和 B 实体,其中 A 可以有更多 B
@Entity
@Table(name = "A")
public class A {
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "b_id", nullable = false, insertable = true, updatable = false)
private Set<B> bs;
}
我需要说 jpa 在特殊情况下不加载 B 集。
我尝试了另一种方法,我定义了 fetch = FetchType.Lazy,然后当我想加载 B 时我说休眠。但是问题是,当我执行 a.getBs() 时,即使我执行休眠也会加载 bs不想要这种行为(我只想检查 B 是否已加载)。这意味着我需要强制使用 jpa 休眠,以便以后不使用延迟加载模式加载子实体(a.getBs()),或者强制不使用急切加载模式加载实体。
在 jpa 中有方法 Root.fetch()。我需要 Root.unfetch()
【问题讨论】:
-
您能解释一下为什么需要这样做吗?如果人们知道您要完成的工作,您将获得更好的帮助。
-
如果我理解正确,当您调用 a.getBs 时您不想加载 bs?
-
是的。当我调用 a.getBs 时,我不想加载 bs。 @forgivenson 我将实体重新映射到模型,我只想重新映射那些已在第一个查询中加载的实体
-
这有意义吗?如果你不想要 B 不要调用 getter?
-
@Zeromus 是的。基于此(已加载或未加载),我执行其他功能