java - Spring Data 中的重构返回 List<Object[]>

标签 java spring spring-data-jpa

我一直在从事具有多种存储库方法的遗留项目,如下所示:

@Query(value = "SELECT "
        + "  i.uf, "
        + "  i.cidade "
        + "FROM Imovel AS i "
        + "WHERE i.ativo = 'Sim' AND "
        + "      EXISTS (SELECT 1 "
        + "              FROM ImovelFoto AS f "
        + "              WHERE f.codigoImovel = i.codigo)"
        + "GROUP BY i.uf, i.cidade", nativeQuery = true)    
List<Object[]> findUFCidade();

我想将其更改为这样的对象:

public class LocalizacaoAgrupadaDTO {

    private String uf;
    private String cidade;

    // Getters e Setters omitidos
}

This answer建议将 nativeQuery 更改为 JPQL

但是,由于不同的语法和实体映射,此更改增加了额外的复杂性,因为此 select 子句是与实体没有直接关系的分组。

重构 Spring Data JPA 的最佳方式是什么?

我应该始终尝试使用 JPQL 还是可以使用 nativeQuery?

最佳答案

并没有真正的“最佳”方法来使用 Spring Data JPA 重构它。您可以从一系列选项中进行选择。

我认为最“理想”/现代的选择(尽管可能是最耗时的)是改用正确映射的对象和 JPQL。

您的结果不需要是 @Entity不过,对象本身,您可以使用类似 SELECT new LocalizacaoAgrupadaDTO(e.uf, e.cidade) FROM EntityObject e ...<rest of JPQL query 的语法以特定 DTO 类型返回查询结果。

http://www.objectdb.com/java/jpa/query/jpql/select

关于java - Spring Data 中的重构返回 List<Object[]>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45490584/

相关文章:

java - 为什么这个解码器会抛出 MalformedURLException?

java - Spring Data JPA - 删除子实体而不是在更新时设置为空?

java - hibernate "auto schema update"是否会丢弃它不拥有的任何内容?

java - 无法从元组实例化类

java - 制作一个jar文件,应用程序被java安全阻止

java - 如何实现具有不同参数数量的抽象方法

java - 调试 Tomcat 应用程序启动

spring - 如何将新的 Vaadin Spring Boot 插件与 Vaadin4Spring EventBus 一起使用

java - @ControllerAdvice 不返回 json 响应

java - 未找到此类 Bean 定义 - 异常