gpt4 book ai didi

java - 如何使用 Hibernate 检索类的成员对象?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:27:33 26 4
gpt4 key购买 nike

使用以下代码我可以成功检索用户的地址字段,为此我需要使用 Projection 定义其所有字段。假设地址有 100 个字段,在这种情况下我必须定义所有字段。

我想知道是否可以只返回客户的地址对象而无需在 Proposition 中定义其所有字段?

我知道我可以检索地址的 id 并使用它来检索它的对象,但我想知道除了这个或定义它的所有字段之外是否还有其他方法。

hibernate

            .....
Criteria cre = session.createCriteria(User.class, "user")
.createAlias("user.address", "addr");

cre.add(Restrictions.eq("user.id", ID));

ProjectionList pl = Projections.projectionList();
pl.add(Projections.property("addr.id").as("id"));
pl.add(Projections.property("addr.unit").as("unit"));
.......
cre.setProjection(pl);
Address address = (Address) cre.list().get(0);

我也使用了以下内容,但它遇到了错误(无法解析属性:com.myProject.User 的地址)

    pl.add(Projections.property("addr").as("address"));

Java

@Entity
public Class User {

@Id
@GeneratedValue
private long id;

@OneToOne
private Address address;

...
}

最佳答案

使用 JPQL/HQL:

select a from User u join u.address a where u.id = :userId

Criteria API 比 JPQL 更受限制,并且不能选择根实体以外的任何其他实体。如果不必动态组合查询,则不应使用它。当然,如果关联是双向的,你可以简单地使用

select a from Address a where a.user.id = :userId

或其等效标准:

Criteria c = session.createCriteria(Address.class, "a");
c.createAlias("a.user", "u");
c.add(Restrictions.eq("u.id", userId));

关于java - 如何使用 Hibernate 检索类的成员对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19993000/

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