gpt4 book ai didi

java - 使用 hibernate 禁用属性/集合加载

转载 作者:行者123 更新时间:2023-12-02 00:55:23 26 4
gpt4 key购买 nike

有人知道如何防止 hibernate 加载集合或多对一关联吗?

我有一个用例,我需要加载一个对象,但调用程序可以确定是否加载某些属性。对于集合的一部分也是如此:必须获取某些行,而其他则不需要。

域类:

public class SomeClass {
private SomeClass parent;
private Set<OtherClass> collection;
}

public class OtherClass {
private Date startDate;
private Date endDate;
}

public class Dao {
public SomeClass loadClass(long id, boolean parents, boolean historicalData) {
// load SomeClass
// if parents == true, load parent, otherwise leave <null>
// if historicalData == false, load OtherClass where endDate == <null>
}
}

我想到了 2 个解决方案,但现在我想知道是否可以通过条件或查询来实现。

解决方案1是不要在hibernate配置中建立从SomeClass到OtherClass的关联以及父子关系,并在代码中加载该关联。
解决方案2是使用不同的实体名称定义不同的映射来服务于特殊情况。

在这种情况下,调用者可能位于其他 JVM 或事务中,因此 session 将关闭,因此延迟加载不是一个真正的选择。

最佳答案

为此,您应该利用 Hibernate 的延迟加载功能。您可以对集合进行注释,例如:

@OneToMany(fetch=FetchType.LAZY)

在这种情况下,Hibernate 仅在您实际在代码中访问该集合时才加载该集合。

关于java - 使用 hibernate 禁用属性/集合加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/939689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com