gpt4 book ai didi

java - Criteria 部分获取 @ManyToOne 关系

转载 作者:行者123 更新时间:2023-12-01 14:56:51 26 4
gpt4 key购买 nike

有没有办法获取关联的 ManyToOne关联实体部分仅使用标准?

我有以下案例

@Entity
public class Foo {
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Bar bar;
// getters/setters and lots other attributes
}

@Entity
public class Bar {
private String name;
@OneToMany(fetch = FetchType.EAGER)
private Collection<ComplexObject> complexObjects;
// getters/setters
}

我有一个Criteria选择我所有的 Foo的,我只想与它一起获取 name Bar的与之相关。我不想要ComplexObject的 Collection s 一起加载。有没有办法在不修改 Bar 的情况下实现这一点?

我想要这个是因为我想向用户展示类似的东西

      Foo.Attr1, Foo.Attr2, Foo.Bar.Name

最佳答案

不,这是不可能的。当您将集合标记为急切获取时,它始终会急切获取。如果您希望它延迟加载,则应将其标记为延迟加载。

但您只能选择三个属性:

Criteria c = session.createCriteria(Foo.class, "foo");
c.createAlias("foo.bar", "bar");
c.setProjection(Projections.projectionList().add(Projections.property("foo.attr1"))
.add(Projections.property("foo.attr2"))
.add(Projections.property("bar.name")));

或者,更具可读性:

String hql = "select foo.attr1, foo.attr2, bar.name from Foo foo"
+ " inner join foo.bar bar";

关于java - Criteria 部分获取 @ManyToOne 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245581/

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