boa tarde. preciso de uma query, em que as colunas que quero podem variar.
Repository:
@Query(nativeQuery = true, value = "SELECT SUM(:mes) AS total FROM tb_pessoal_socios_dependentes_pensao_valor v "
+ "INNER JOIN tb_pessoal_socios_dependentes_pensao_ano a ON a.socio_id IN (:socioId) "
+ "WHERE a.ano = (:ano)")
Double findTotalPeriodo(Long socioId, String mes, String ano);
Service:
final Double total = pagamentoSocioRepository.findTotalPeriodo(entity.getSocio().getId(), "jan", "2023");
System.out.print(total);
No caso, onde está “jan” e “2023”, pode mudar…
as colunas com valor são: jan, fev, …
Para testar, pensei em algo desta forma porém não deu mt certo. Algm poderia me ajudar?
O problema da sua abordagem é que, provavelmente, a consulta está sendo montada com aspas no sum
, ficando assim: SUM('jan')
.
Acredito que, nesse caso, seja melhor vc usar um repositório customizado. Para isso, vc precisa ter uma interface e criar a implementação e, com isso, fazer a query usando uma string na mão. E executar a consulta usando uma entityManager
.
Por exemplo:
public interface PagamentoSocioRepository implements PagamentoSocioRepositoryCustom {
// métodos
}
public interface PagamentoSocioRepositoryCustom {
Double findTotalPeriodo(Long socioId, String mes, String ano);
}
@Component
public class PagamentoSocioRepositoryCustomImpl implements PagamentoSocioRepositoryCustom {
public Double findTotalPeriodo(Long socioId, String mes, String ano) {
// crie a consulta de forma dinâmica e execute com entityManager
}
}
DOCS: Spring Data JPA - Reference Documentation
obrigado pela resposta.
mas no caso, meu repository tem que usar extends JpaRepository, pois faço a persistência dos dados utilizando JPA;
e tbm fiquei um pouco confuso no que exatamente fazer aqui.
public interface PagamentoSocioRepository implements PagamentoSocioRepositoryCustom {
// métodos
}
Ah sim, na real, pode deixar o extends JpaRepository
mesmo (eu que esqueci de colocar no exemplo).