Hibernate延迟加载无法正常工作

Far*_*san 11 java hibernate jpa jpa-2.0

我正在使用版本3.6.1.Final

我的实体bean中有以下属性

    @JoinColumn( name = "FOLDER_PARENT_ID", referencedColumnName = "FOLDER_ID" )
@ManyToOne(cascade=CascadeType.MERGE, fetch= FetchType.LAZY )
private FolderTbl parent;
Run Code Online (Sandbox Code Playgroud)

在我的单元测试中,Assertnull失败,因为getParent()不为null

assertNull( folderTbl.getParent() );
Run Code Online (Sandbox Code Playgroud)

还有什么办法可以阻止hibernate加载父进程?

Aru*_*hny 10

即使将lazy设置为true,父值也不会为null.延迟加载使用代理对象并将其分配给父属性.当我们尝试使用父(调用getParent())时,它将使用代理对象加载实际的父对象.

如果您不想加载对象,请不要为该项配置JPA属性并将其设置为瞬态.


Jig*_*shi 8

正确配置为懒惰加载,关键是您正在错误地测试它.

Hibernate将在您调用方法getParent()时加载对象,当对实际对象的请求到来时它将加载.

您可以通过配置show_sql为true 来检查此事.它会在您调用时调用查询 getParent()