Spring Data Rest Assocation摘录

时间:2016-03-18 14:19:48

标签: spring-data-rest

我有一个资源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;
                }

                ...

这个设计是这样的吗?有什么工作吗?

0 个答案:

没有答案