在Spring数据中重构List <object []>

时间:2017-08-03 17:07:48

标签: 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的{​​{1}}。

然而,由于语法和实体映射不同,这种变化增加了额外的复杂性,因为这个select子句是一个与实体没有直接关系的小组。

重构使用Spring Data JPA的最佳方法是什么?

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

2 个答案:

答案 0 :(得分:1)

使用Spring Data JPA实际上没有“最好”的方法来重构它。您可以选择一系列选项。

我认为最“理想”/现代的选择虽然可能是最耗费时间,但却转而使用正确映射的对象和JPQL。

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

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

答案 1 :(得分:0)

创建custom repository,然后使用ResultTransformer

Another example

你需要从EntityManager here a example获取来自休眠的对象Session。