1対1の関係を持つ次の2つの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 ie code の行に沿ってコードを抽出します。
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 で希望どおりに動作する場合は喜んでアップグレードします。