我有一種方法可以快速獲取一個 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
提交
取消
