gpt4 book ai didi

java - 在不从数据库中提取实体的情况下获取 JPA 中实体的 ID?

转载 作者:行者123 更新时间:2023-11-30 09:33:50 24 4
gpt4 key购买 nike

假设我有以下两个具有一对一关系的 JPA 实体

@Entity
public class Foo {
@Id
private Integer id;

@Column(...)
private String data;
}

@Entity
public class Bar {
@Id
private Integer id;

@OneToOne(fetchType=LAZY)
@JoinColumn(name="foo_fk")
private Foo foo;

@Column(...)
private String x;

@Column(...)
private String y;
}

我想做的是找到所有满足某些搜索条件的 Bar 实体,例如 SELECT Bar b FROM Bar WHERE b.x = :xValue 我想做的是迭代结果集并提取foo 的主键和值 y,即沿以下行的代码。

List<Bar> results = // query to get all the results that meet value x 
for(Bar bar: results) {
String x = bar.getX();
String y = bar.getY();
Integer fooId = bar.getFoo().getId(); // at this point Hibernate pulls back foo from the db
// do something with x,y and fooId
}

我想避免的是当我执行 bar.getFoo().getId() 时让 ORM 发出 SELECT.我知道我可以按照 SELECT new com.example.MyResult(b.x,b.y,b.foo.id) FORM Bar b WHERE b.x = :xValue

行进行报告查询

有没有办法在不编写报告查询的情况下避免对 bar.getFoo().getId() 进行选择?我正在使用 Hibernate 3.6.10 和 JPA 2 我很乐意升级到 Hibernate 4.1.x,如果它能做我想做的事的话。

最佳答案

SELECT b.foo.id FROM Bar b WHERE b.x = :something

这只会为您提供 ID,但无法保证 ORM 层将如何获得它们。如果您想完全控制 native 查询,请自己编写。

关于java - 在不从数据库中提取实体的情况下获取 JPA 中实体的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995430/

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