我一直在从事具有多种存储库方法的遗留项目,如下所示:
@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 类型返回查询结果。
关于java - Spring Data 中的重构返回 List<Object[]>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45490584/