Hibernate 是否会进行 null 检查来初始化惰性实体?

标签 hibernate jpa

假设我有一个实体 Parent 和一个相关实体 Child(可为 null),并且具有 @OneToMany(fetch = FetchType.LAZY) 关系

在我的操作 bean 中,以下代码会初始化子实体吗?

bool 值hasChild = false;

if(parent.getChild()!=null){
    hasChild = true;
}

我在文档中看到它说延迟集合获取:当应用程序对该集合调用操作时,会获取该集合。这是集合的默认设置。但不确定空检查是否被归类为操作

谢谢

最佳答案

不,null 检查不足以可靠地触发延迟加载。您需要执行需要存在实际数据的操作,例如在 Collection 或子对象的任何 getter 上调用 size()

请注意,您需要访问事务内的延迟加载属性。

即使您什么都不做,也不能保证延迟加载的属性不会被加载。 FetchType.LAZY 只是对持久性提供程序的提示,因此延迟加载测试可能会导致脆弱的测试。

关于Hibernate 是否会进行 null 检查来初始化惰性实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15809082/

相关文章:

java - 使用Hibernate不会触发MySQL的 "ON UPDATE CURRENT_TIMESTAMP"

java - 无法延迟初始化角色集合。简单的 JPA findById

java - Hibernate 空间查询异常,但在 postgres 控制台中正常工作

java - 测试时持久性不同

hibernate - JPA/Hibernate 中的复合键具有继承的类

jpa - 在 OSGi 环境中,类路径和类加载器是如何设置的?

java - Web 应用程序中的多语言数据

java - 从 Hibernate 5.2 升级到 5.3 时 SingletonEhCacheRegionFactory 不再可用

java - spring+JPA EntityManager注入(inject)service和dao

测试中的 Hibernate OnDelete 级联不起作用