JPA 通过 id 而不是实体加入

JPA join by id not entity

我创建了一个条件为 api 的查询,该查询通过另一个链接的实体检索实体:

public List<Booking> getBookingsByUser(User user) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Booking> createQuery = cb.createQuery(Booking.class);
    Root<Booking> booking = createQuery.from(Booking.class);
    Join<Booking, UsersProjects> join = booking.join(Booking_.userProject, JoinType.INNER);
    createQuery.where(cb.equal(join.get(UsersProjects_.user), user));
    createQuery.select(booking);
    return em.createQuery(createQuery).getResultList();
}

这工作正常。但是如何重写它以通过 userId (Long) 查找实体? 用户的元模型具有 User_.id (SingularAttribute)。

用户也是实体。 "UsersProject" 正好有一个用户和一个项目。

UserProjectsUser之间再添加一个连接子句:

Join<Booking, UsersProjects> userProjectsJoin = booking.join(Booking_.userProject, JoinType.INNER);
Join<UsersProjects, User> userJoin = userProjectsJoin.join(UserProjects_.user);
createQuery.where(cb.equal(userJoin.get(User_.id), userId));