我有一种方法可以快速获取一个 Element。为此,我想使用 id。如果我使用 (root.fetch) 加载eager,则此查询会导致空结果。但没有它,它的工作原理!为什么?@Overridepublic 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);}
1 回答

慕容3067478
TA贡献1773条经验 获得超3个赞
这很简单 - 没有products
或productiveShifts
与root
空结果集相关联。请记住,您在那里使用 INNER JOIN,因此关联必须存在。
另一方面,如果您使用 Left Join,它可能会按预期工作。
添加回答
举报
0/150
提交
取消