首页 > 解决方案 > 使用带有 Spring Projection Interface 的本机查询来选择字段

问题描述

我想知道如何填充这些类:

interface BaseDTO {

    Integer getId();

    String getNome();

    Boolean getAtivo();

    RegionalDTO getRegional();

    MunicipioDTO getMunicipio();
}

interface RegionalDTO {

    Integer getId();
}

interface MunicipioDTO {

    Integer getId();
}

并运行此查询

@Query(value = "SELECT " +
        "base.ID_BASE AS id, base.NOME AS nome, base.ATIVO AS ativo, " +
        "regional.ID_REGIONAL AS ID_REGIONAL, " +
        "municipio.ID_MUNICIPIO AS ID_MUNICIPIO " +
        "FROM TB_BASE base " +
        "LEFT JOIN TB_REGIONAL regional on base.ID_REGIONAL = regional.ID_REGIONAL " +
        "LEFT JOIN TB_MUNICIPIO municipio on base.ID_MUNICIPIO = municipio.ID_MUNICIPIO " +
        "ORDER BY base.ID_BASE", nativeQuery = true)
List<BaseDTO> getAll();

所以我想选择查询中的字段,因为后面我会在这些DTO中放更多的字段。

标签: javaspringspring-bootspring-data

解决方案


我认为最简单的方法是使用简单的接口,只有 idregionalmunicipio. 调用后getAll将此接口映射到适当的类结构(其中 ids 变成 dtos)。

List<RealDTO> result = repository.getAll().stream()
  .map(i -> new RealDTO(i))
  .collect(Collectors.toList());

推荐阅读