我看过this
和我有类似的问题,但我想从四个字段中只获取两个-例如:仅id和name,id,name,dateOfBirth,weight。

 public interface ICatDAO extends CrudRepository<Cat,Long> {

     @Query(value = "SELECT c.id, c.name FROM Cat c")
     public List<Cat> findAll();
     //...
 }


如果我使用查询:@Query(value = "SELECT c FROM Cat c"),我得到的对象列表类型为“猫”,但带有所有字段。

如果我使用查询:@Query(value = "SELECT c.id, c.name FROM Cat c")我得到对象列表类型'Object',这就是问题所在。在这种情况下我该怎么办?

最佳答案

您需要使用DTO,如建议使用here

创建您的CatDto

public class CatDto {
    private Long id;
    private String name;

    public CatDto(Long id, String name) {
        this.id = id;
        this.name = name;
    }
    // getters, setters and other stuff you need
}


然后编辑您的仓库:

public interface CatRepo extends CrudRepository<Cat,Long> {

    //...
    @Query("select new ...CatDto(c.id, c.name) from Cat c")
    public List<CatDto> getCatDtos();
}


然后,您将获得CatDto的列表。

...CatDto(...)-是CatDto构造函数的fully qualified name。例如com.example.mycatproject.domain.CatDto

另一种方法是对DTO使用'projection'接口:

public interface CatDto {
    Long getId();
    String getName();
}

public interface CatRepo extends CrudRepository<Cat,Long> {

    //...
    @Query("select c.id as id, c.name as name from Cat c")
    public List<CatDto> getCatDtos();
}

09-11 17:13