java - 获取JPA中实体的id而不从数据库中提取实体?

标签 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")
    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/

相关文章:

java - 男性和女性字符串的正则表达式是什么

java - 自动将 `insertable = false, updatable = false` 添加到 Netbeans 生成的实体

java - 在 Java EE 应用程序中使用 groovy?

java - Hibernate 4/Spring 3.2 NonUniqueObjectException

java - 我可以使用普通的java类文件形式的web.xml文件读取上下文参数吗

Java 8 通用重试特定异常

java - 如何设置从我的 Java 应用程序启动的 MacOS 应用程序包的工作目录?

double 的 Java ArrayList

java - 如何使用 JPA 和 Hibernate 返回一个 Map,其中键是实体属性,值是实体

spring - 得到错误 java.lang.NoClassDefFoundError : org/hibernate/validator/resourceloading/ResourceBundleLocator