Hibernate - 如何在不执行 Join 的情况下使用 Criteria Query 仅 select 外键值?

Hibernate - How to select just the foreign key value using Criteria Query without doing a Join?

所以有一个类似(几乎相同)的问题:但是我需要避免加入

所以我有两个 tables,一个与另一个有 FK

(服务)

(账户)

服务 class 具有这样定义的外键:

@Entity
public class Service extends BaseDbEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @ManyToOne(fetch = FetchType.LAZY, optional = false)
    private Account account;

...

我想做的是查询与给定帐户相对应的所有服务,具有 accountId,而不进行 JOIN,因为该 ID 已经在服务中 table.

现在,我的条件查询如下所示:

CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<Service> criteria = cb.createQuery(Service.class);
Root<Service> root = criteria.from(Service.class);
criteria
        .select(root)
        .where(cb.equal(root.join("account").get("id"), accountId));
session.createQuery(criteria).getResultStream();

这最终生成了这个查询:

Hibernate: select service0_.id as id1_3_, service0_.name as name4_3_, service0_.account_id as account_id6_3_ from Service service0_ inner join Account account1_ on service0_.account_id=account1_.id where account1_.id=?

这没有意义.. 它在一个字段上进行连接,然后只为该字段创建一个 where 子句。

如果我这样做:

root.get("account_id")

它只是抛出一个异常,指出该字段不可用。

避免这种情况的正确方法是什么?

好的,我刚刚找到问题的答案:

而不是做

root.join("account").get("id")

我只需要做:

root.get("account").get("id")

避免执行 JOIN。