Java 修改Spring数据REST投影后生成的SQL查询

Java 修改Spring数据REST投影后生成的SQL查询,java,spring,spring-data,spring-data-jpa,spring-data-rest,Java,Spring,Spring Data,Spring Data Jpa,Spring Data Rest,编辑: 如何在SELECT for Spring数据Rest投影中只保留所需的列 Spring数据Rest投影有助于为生成的链接获取列的子集,但在后面生成的查询中仍然包含所有列 如果SQL查询在SELECT中只有那些列在投影中,那么如何创建投影呢 例如:资源A包含字段bubi和资源B,其中包含字段foo,bar,zed 您应该为B创建一个投影,其中只列出所需的字段: @Projection(name="reduced", types = B.class) public interface BRe

编辑: 如何在SELECT for Spring数据Rest投影中只保留所需的列

Spring数据Rest投影有助于为生成的链接获取列的子集,但在后面生成的查询中仍然包含所有列

如果SQL查询在SELECT中只有那些列在投影中,那么如何创建投影呢

例如:资源
A
包含字段
bubi
和资源
B
,其中包含字段
foo
bar
zed

您应该为
B
创建一个投影,其中只列出所需的字段:

@Projection(name="reduced", types = B.class)
public interface BReduced {
    String foo;
    //exclude bar, for instance
    int zed;
}
然后在
A
的投影中使用该投影

@Projection(name="reduced", types = A.class)
public interface AReduced {
    int bubi;
    BReduced b;
}

我理解得很好,还是您在谈论SQL查询中的性能?

我不知道为什么文档中缺少它,但是这个spring示例(来自spring)显示您可以使用投影作为@query的返回类型。因此,您可以:

public interface ActionId {
    String getId(); 
}

@Query("select a.id as id from Action a where a.type = :type")
public List<ActionId> findByType(@Param("type") String type);
公共接口ActionId{
字符串getId();
}
@查询(“从操作a中选择a.id作为id,其中a.type=:type”)

public List

bluish,感谢您的回复,但我们是否也可以有这样一个规定,即生成的SQL与投影中的列相同,例如,对于AReduced,select只有bubi,而foo,zed?嵌套投影是最常用的功能之一,我完全喜欢它,我只是想知道这是否也会触发SELECT子句的更改。在存储库中,您可以添加一个方法,使用
@query(“SELECT…”)
注释指定确切的SQL查询。因此,您将有一个自定义查询!这是真的,但如何将SQL查询(很可能是findQuery)链接到投影?因此,当我调用/app/A/?projection=reduced时,该查询仅针对投影触发。因此,如果我访问/app/A,那么findAll()无论如何都会得到所有列,但当我点击一个投影URL时,它只会在SELECT@fortm在projections中对SQL执行的任何更新??