猿问

CriteriaBuilder Query 在使用 fetch 时中断,但不使用

我有一种方法可以快速获取一个 Element。为此,我想使用 id。如果我使用 (root.fetch) 加载eager,则此查询会导致空结果。但没有它,它的工作原理!为什么?


@Override

public Request getRequestById(int id) {

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();

    CriteriaQuery<Request> criteriaQuery = criteriaBuilder.createQuery(Request.class);

    Root<Request> root = criteriaQuery.from(Request.class);

    Predicate equals = criteriaBuilder.equal(root.get("id"), id);

    root.fetch("products",JoinType.INNER);

    root.fetch("productiveShifts",JoinType.INNER);

    criteriaQuery.where(equals);

    return entityManager.createQuery(criteriaQuery.select(root)).getResultList().get(0);

}


青春有我
浏览 187回答 1
1回答

慕容3067478

这很简单 - 没有products或productiveShifts与root空结果集相关联。请记住,您在那里使用 INNER JOIN,因此关联必须存在。另一方面,如果您使用 Left Join,它可能会按预期工作。
随时随地看视频慕课网APP

相关分类

Java
我要回答