假设我有以下两个具有一对一关系的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在我bar.getFoo().getId()
时发出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,如果它可以做我想要的。
答案 0 :(得分:2)
SELECT b.foo.id FROM Bar b WHERE b.x = :something
这将只为您提供ID,但无法保证ORM层将如何获取它们。如果您想要对本机查询进行绝对控制,请自行编写。
答案 1 :(得分:0)
Bar的foo
关联显然是懒惰的,让它急切的帮助。