java - 如何转换 Spring 数据存储库返回的对象?

标签 java spring spring-data spring-data-jpa jpql

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

 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") 我会得到对象列表类型“Cat”,但包含所有字段。

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

最佳答案

您需要使用DTOhere建议。

创建您的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(...) - 是 fully qualified name您的 CatDto 构造函数。例如com.example.mycatproject.domain.CatDto

另一种方法是使用 ' projection ' DTO 接口(interface):

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

关于java - 如何转换 Spring 数据存储库返回的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45246104/

相关文章:

java - 我如何使用struts 2将url重定向到特定页面

JavaFX ComboBox OnChangeListener 回滚变化

java - 带有断言异常的 Spring 单元测试 Java

mysql - 重复条目而不是使用现有实体

cassandra - 删除 Cassandra 连接作为硬 Spring 启动依赖项

java - 部署到 tomcat 后访问资源文件时出现 FileNotFoundException

java.util.NoSuchElementException - 扫描仪读取用户输入

java - Spring Hibernate,从下拉菜单中选择时更新 JSP View

java - 如何通过 CXF、Spring 和 Jackson 使用多个 JSON 提供程序

java - QueryDSL JPAAnnotation Processor 为单个类生成 QModel