JPA-休眠一对一-在这种情况下,延迟加载真的有效吗?

时间:2018-11-26 09:50:14

标签: hibernate jpa lazy-loading eager-loading

对于JPA-HIbernate一对一关联,我观察到以下情况:

使用惰性提取一对一关联时-触发SELECT查询

class A {
    @OneToOne(fetch = FetchType.LAZY, mappedBy = "a", cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    public B getB() {
        return B;
    }
}

使用EAGER进行一对一关联时-触发JOIN查询

class A {
    @OneToOne(fetch = FetchType.EAGER, mappedBy = "a", cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    public B getB() {
        return B;
    }
}

我观察到的是在情况1中,也没有任何延迟,但是在加载父实体时几乎立即触发了SELECT查询。

在JPA-Hibernate中采用默认配置的情况下,或者在使用SELECT / JOIN查询时始终为EAGER的情况下,延迟加载是否真的起作用?

1 个答案:

答案 0 :(得分:0)

因此,我发现了JPA一对一实体的默认行为是什么。 即使获取类型为LAZY,他们也总是很渴望。没有为其创建代理,一对一关联与父提取一起被解析。

another thread建议,字节码检测是实现延迟解析的正确方法。