Java 在JPA中获取实体的id,而不从数据库中提取实体?

Java 在JPA中获取实体的id,而不从数据库中提取实体?,java,hibernate,jakarta-ee,jpa,Java,Hibernate,Jakarta Ee,Jpa,假设我有以下两个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")

假设我有以下两个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; 
}
我要做的是找到所有满足某些搜索条件的条形图实体,例如
从条形图中选择条形图b,其中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 
 }
List results=//查询以获取满足值x的所有结果
用于(条形图:结果){
字符串x=bar.getX();
字符串y=bar.getY();
整型fooId=bar.getFoo().getId();//此时Hibernate从数据库中回调foo
//用x,y和fooId做点什么
}
我想要避免的是,当我执行
bar.getFoo().getId()时,ORM问题是一个选择
. 我知道我可以沿着
SELECT new com.example.MyResult(b.x,b.y,b.foo.id)表单栏b进行报告查询,其中b.x=:xValue

有没有一种方法可以避免在不编写报告查询的情况下在
栏上选择.getFoo().getId()
?我使用的是Hibernate3.6.10和JPA2,如果Hibernate4.1.x能满足我的需要,我很乐意升级到它

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

这将只提供ID,但无法保证ORM层将如何获得它们。如果您想绝对控制本机查询,请自己编写。

来自Bar的
foo
关联显然是懒惰的,让它变得急切会有帮助。

至少在Hibernate+Postgres中,它不会收回整个对象(我认为这是您的问题)。他可能会保证这一点,让他的select select保持不变,或者有一个虚拟的内部联接。@Adam你能举一个使用虚拟内部联接的技术的例子吗?