Spring Boot中Criteria JPA无法获取三级嵌套对象数据求助
解决JPA Criteria三级关联数据加载问题
你的问题出在只显式加载了Product到ProductItem的二级关联,但没有配置ProductItem到Status的三级关联加载。JPA Criteria中,若要获取嵌套关联的数据,需要逐层配置fetch操作。
修改后的代码如下:
var criteriaBuilder = entityManager.getCriteriaBuilder(); var criteriaQuery = criteriaBuilder.createQuery(Product.class); var rootContractedProduct = criteriaQuery.from(Product.class); // 加载Product自身的status关联 rootContractedProduct.fetch("status", JoinType.LEFT); // 先获取Product到ProductItem的fetch对象,再加载ProductItem的status关联 Fetch<Product, ProductItem> productItemFetch = rootContractedProduct.fetch("productItem", JoinType.LEFT); productItemFetch.fetch("status", JoinType.LEFT); TypedQuery<Product> typedQuery = entityManager.createQuery(criteriaQuery);
关键说明:
- 调用
root.fetch("productItem")会返回一个Fetch对象,该对象代表Product与ProductItem的关联关系。 - 通过这个
Fetch对象再调用fetch("status"),就能告知JPA在查询Product的同时,一并加载ProductItem关联的Status数据。 - 你的实体映射本身是正确的(直接查询ProductItem能获取Status),问题仅在于Criteria查询中缺少了这层嵌套fetch的配置。
内容的提问来源于stack exchange,提问作者Gabrielzious
相关产品推荐
相关产品推荐

