我看过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();
}