gpt4 book ai didi

java - 排除在 Hibernate 对象中加载特定属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:30:32 24 4
gpt4 key购买 nike

我有一个实体类

class B{
@ManyToOne(fetch = FetchType.EAGER)
private A a;
@ManyToOne(fetch = FetchType.LAZY)
private C c;

在某些情况下,我不想加载对象 A,因为我已经有了那个对象。C也一样。但这些是我根本不想加载这些对象的特定场景。

有什么方法可以告诉 hibernate 不要加载实体对象的某些属性。 {没有 Eager/Fetch 建议。我只是希望这种情况只在特定情况下发生]

注意:我现在正在使用 Criteria 来获取对象。

最佳答案

由于您使用 HQL 进行查询,因此您可以指定 fetching strategy at runtime根据您的条件使用“fetch”关键字,如下所示:

List result = sess.createCriteria(B.class)
.add( Restrictions.like("name", "yourcondition%") )
.setFetchMode("a", FetchMode.EAGER)
.setFetchMode("c", FetchMode.LAZY)
.list();

编辑:

由于 FetchMode.EAGER 和 FetchMode.LAZY 已被弃用,因此 FetchMode.SELECT 或 FetchMode.JOIN

List result = sess.createCriteria(B.class)
.add( Restrictions.like("name", "yourcondition%") )
.setFetchMode("a", FetchMode.JOIN)
.setFetchMode("c", FetchMode.SELECT)
.list();

如果你想避免 SELECT 或 JOIN 检查 here .

关于java - 排除在 Hibernate 对象中加载特定属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14701386/

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