J'utilise des données de ressort. Je veux obtenir des contrats de DB. Donc, je crée deux requêtes. En premier j'obtiens des contrats d'identification que j'ai besoin, en second j'obtiens le contrat par cette identification.Type de retour de l'ID de requête
première requête dans Repository.class
@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();
de ServiceJPA.class
Mais dans la dernière ligne ci-dessus j'ai une erreur.
java.lang.IllegalArgumentException: Parameter value element [2] did not match expected type [java.lang.Long (n/a)]
Si je crée simplement
List<Long> contractsIdL = new ArrayList<>();
contractsIdL.add(2L);
contractsIdL.add(3L);
contractsIdL.add(4L);
List<Contract> contracts = contractRepository.findAll(contractsId);
Tout fonctionne très bien. Je ne peux pas calculer ce qui ne va pas. Dans quel type la première requête renvoie-t-elle l'identifiant de retour?
p.s. Le type d'id dans DB est bigint
p.p.s J'ai demandé la première requête avec System.out.println - il semble retourner des numéros de corect.
Vérifiez ce qui est dans le tableau. Je suppose que l'une des valeurs n'est pas longue (par exemple, nulle) – StanislavL
J'ai été traité par System.Out.Println - montre [2, 3, 4] - Exactement ce dont j'ai besoin –
Pourrait-il être les valeurs d'id ne sont pas Longs, mais par exemple. Entiers Vous devrez peut-être définir la classe de résultat – StanislavL