Come utilizzare il preparato istruzione JPA

Io sono un play framework Sviluppatore dell’applicazione.Sto usando createNativeQuery metodo JPA. In questo esempio voglio usare dichiarazione preparata. Per favore, qualcuno mi aiuta?
Qui è il codice senza JPA. Ho bisogno di aiuto per la conversione di dichiarazione Preparata.

Query query = JPA.em().createNativeQuery("select count(*) from truck t inner join" +
    "box b where t.truck_id=b.truck_id and t.shipment_upc='" + code + "'");

BigInteger val = (BigInteger)query.getSingleResult();
System.out.println(val);
Utilizzare un parametro t.shipment_upc= :upc -> setParameter("upc", code)
grazie per la vostra risposta. Io sono un principiante . mi puoi dire in dettaglio.. Ringrazio in anticipo.
La risposta di Doc punti 🙂
grazie grazie mille

OriginaleL’autore user3454863 | 2014-04-11

2 Replies
  1. 15
    Query query = JPA.em().createNativeQuery("select count(*) from truck t inner join box b where t.truck_id=b.truck_id and t.shipment_upc=:code");
    query.setParameter("code", code);
    grazie doc per la tua risposta
    Ehi @SubirKumarSao, parametri utilizzando i tag “:xxx” non funziona “createNativeQuery” solo “createQuery”, almeno sul mio setup utilizzando EclipseLink, sei sicuro che il codice di cui sopra eseguire? Se sì, mi potete dire che versione di cose stai usando? thx per la collaborazione.
    Il suo lavoro perfettamente per selezionare e aggiornare. Vorrei sapere come fare per inserire
    è giusto osservare che ciò è impossibile in EclipseLink (almeno 2.5.1). Vedere la mia risposta per una soluzione compatibile con EclipseLink — inclusione di parametri posizionali.
    non è molto utile per inserimenti multipli

    OriginaleL’autore Subir Kumar Sao

  2. 5

    Breve Riassunto

    È necessario utilizzare i parametri di query, ma dal momento che si sta utilizzando un nativo query, si può essere limitato nelle opzioni confrontato con JPQL.

    Stato del Mondo

    Si può essere limitato di parametri posizionali:

    APP non richiede nativo query di supporto denominato parametri, ma alcuni provider JPA può

    Sospensione dell’implementazione di APP supporta i parametri con nome:

    Nativo di SQL query supporto posizionale come parametri denominati


    Soluzione

    Sospensione

    Doc Kumar Sao risposta mostra come risolvere questo problema utilizzando parametri denominati. Questo è possibile, almeno in Sospensione.

    Lo ripeto qui per il confronto:

    Query query = JPA.em().createNativeQuery(
    "SELECT COUNT(*) "+
    "FROM truck AS t "+
    "INNER JOIN box b "+
    "WHERE t.truck_id = b.truck_id "+
    "AND t.shipment_upc = :code"
    );
    query.setParameter("code", code);

    Generico JPA (tra cui EclipseLink)

    Ho scoperto che con EclipseLink (2.5.1), denominato parametri non erano supportati.

    Invece, diventa necessario l’utilizzo di parametri posizionali. Questi può essere espresso in due modi: in modo esplicito e implicito.

    Esplicito indice

    Contrassegnare il parametro utilizzando ?1 (o un altro numero). Questo indice può essere utilizzato per identificare in modo univoco il particolare parametro nella query.

    Query query = JPA.em().createNativeQuery(
    "SELECT COUNT(*) "+
    "FROM truck AS t "+
    "INNER JOIN box b "+
    "WHERE t.truck_id = b.truck_id "+
    "AND t.shipment_upc = ?1"
    );
    query.setParameter(1, code);

    Indice implicito

    Contrassegnare il parametro utilizzando solo ?. Il suo indice è basato sulla sequenza di tutti i parametri di partecipazione nella vostra stringa di query.

    Query query = JPA.em().createNativeQuery(
    "SELECT COUNT(*) "+
    "FROM truck AS t "+
    "INNER JOIN box b "+
    "WHERE t.truck_id = b.truck_id "+
    "AND t.shipment_upc = ?"
    );
    query.setParameter(1, code);

    Note

    Osservare che:

    • Parametri posizionali sono 1 indicizzati.
    • La chiave nella Query parametro mappa è semplicemente l’indice del parametro posizionale.

    Ulteriori fonti

    OriginaleL’autore Birchlabs

Lascia un commento