2017-10-20 7 views
1

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.

+0

Vérifiez ce qui est dans le tableau. Je suppose que l'une des valeurs n'est pas longue (par exemple, nulle) – StanislavL

+0

J'ai été traité par System.Out.Println - montre [2, 3, 4] - Exactement ce dont j'ai besoin –

+0

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

Répondre

1

Je pense que le problème est avec ContractRepository.findContractsIdForInvoicesCreation();

Je pense qu'il ne retourne pas List<Long> comme prévu

+0

Vous avez tout à fait raison. Il renvoie BigInteger, pas long. –