I use spring data. I want to get some contracts from DB. So I create two queries. In first I get contracts id that I need, in second I get contract by this id.
First query in Repository.class
JavaScript
x
@Query(nativeQuery = true, value =
"select id from (" +
"select contract.id, max(invoice.period_to) " +
"from public.invoice " +
"join public.contract on contract.id = invoice.contract_id " +
"where invoice.period_to <= '2017-10-20' " +
"AND contract.close_type IS NULL " +
"AND contract.payment_type != 'TRIAL' " +
"group by contract.id" +
") foo ")
List<Long> findContractsIdForInvoicesCreation();
ServiceJPA.class
JavaScript
List<Long> contractsId = ContractRepository.findContractsIdForInvoicesCreation();
List<Contract> contracts = contractRepository.findAll(contractsId);
But in last line above I have an error.
java.lang.IllegalArgumentException: Parameter value element [2] did not match expected type [java.lang.Long (n/a)]
If I simply create
JavaScript
List<Long> contractsIdL = new ArrayList<>();
contractsIdL.add(2L);
contractsIdL.add(3L);
contractsIdL.add(4L);
List<Contract> contracts = contractRepository.findAll(contractsId);
All works fine. Cant figure out what is wrong. In which type do first query return id?
p.s. id type in DB is bigint
p.p.s. I checked first query with System.out.println – it seems to return correct numbers.
Advertisement
Answer
I think the issue is with ContractRepository.findContractsIdForInvoicesCreation();
I think it doesn’t return List<Long>
as you expected