我有一个资源A,它与资源B有@OneToMany关联。同时,B的存储库配置了excerptProjection
。
因此,每次我想获得A的列表时,都会获取B的关联资源,这将执行一些不需要的查询以减慢整个请求。即使我明确指定A的投影,它不包含B的关联资源的get方法。虽然结果JSON不包含关联资源,但查询仍然执行。
我深入研究了这个问题。我发现关联是否配置了excerptProjection
。无论它们是否出现在最终结果中,都将获取该值。
Beblow是PersistentEntityResourceAssembler的相关代码#getEmbeddedResources
entity.doWithAssociations(new SimpleAssociationHandler() {
/*
* (non-Javadoc)
* @see org.springframework.data.mapping.SimpleAssociationHandler#doWithAssociation(org.springframework.data.mapping.Association)
*/
@Override
public void doWithAssociation(Association<? extends PersistentProperty<?>> association) {
PersistentProperty<?> property = association.getInverse();
if (!associationLinks.isLinkableAssociation(property)) {
return;
}
if (!projector.hasExcerptProjection(property.getActualType())) {
return;
}
Object value = accessor.getProperty(association.getInverse());
if (value == null) {
return;
}
...
这个设计是这样的吗?有什么工作吗?