假设我有以下两个具有一对一关系的 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
}
我想避免的是当我这样做时 ORM 发出 SELECT bar.getFoo().getId()
。我知道我可以按照 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/