java - 如何使用 Criteria Query 只选择外键值?

标签 java jpa criteria-api

假设我有两个实体:

@Entity
public class A {

    @Id
    private int id;

    @ManyToOne
    private B b; 

    //more attributes
}

@Entity
public class B {

    @Id
    private int id;
}

因此,A 的表中有一列 b_id 作为外键。

现在,我只想根据其他字段的某些条件选择 b_id。我如何使用标准查询来做到这一点?

我尝试执行以下操作,抛出 IllegalArgumentException 说 “无法在此 ManagedType [A] 上找到具有给定名称 [b_id] 的属性”

    CriteriaQuery<Integer> criteriaQuery = criteriaBuilder.createQuery(Integer.class);
    Root<A> root = criteriaQuery.from(A.class);
    Path<Integer> bId = root.get("b_id");
    //building the criteria
    criteriaQuery.select(bId);

最佳答案

您需要加入B,然后获取id:

Path<Integer> bId = root.join("b").get("id");

关于java - 如何使用 Criteria Query 只选择外键值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35450072/

相关文章:

java - Google java 电子表格 API,使用单元格 url 更新单元格

java - 根据文件大小将一个 Pdf 文件拆分为多个

java - Hibernate Criteria Query like CLOB 上的运算符(Postgres 8.4)

mysql - 带有连接表的 ManyToOne、oneToMany

java - 为什么我的中间存储库接口(interface)从 Spring Data JPA 1.4.x 升级到更新版本(例如 1.7.1)后会出现问题?

java - Java访问数据库的不同方式

org.hibernate.ejb.criteria.predicate.ComparisonPredicate.render 处的 java.lang.NullPointerException

java - 带有 ElementCollection 的 JPA 条件

java - 当 Body 不可分配给类时如何调试 JMS?

java - Spring Data JPA 是否有 "member of"的命名约定?