Domanda

I Am A Play Framework Application Developer. Sto usando il metodo di CreatanativeQuery in JPA.In questo esempio voglio usare la dichiarazione preparata.Per favore qualcuno mi aiuti? Ecco il codice senza JPA.Ho bisogno di aiuto per convertirlo in una 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);
.

È stato utile?

Soluzione

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);
.

Altri suggerimenti

breve riassunto

È necessario utilizzare i parametri della query qui, ma dal momento che si utilizza una query nativa , potresti essere limitato nelle opzioni rispetto a JPQL.

stato del mondo

Puoi essere limitato a parametri posizionali :

.

JPA non richiede che le query native supportano i parametri denominati, ma alcuni provider JPA possono

L'implementazione di Hibernate di JPA supporta i parametri denominati :

.

Le query SQL native supportano il posizionamento e i parametri denominati


.

Soluzione

Ibernazione

Subir Kumar Sao's Aspons Mostra come Risolvi questo utilizzando i parametri denominati. Questo è possibile almeno in ibernazione.

Lo ripeterò qui per il sake di 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 (incluso Eclipselink)

L'ho trovato con Eclipselink (2.5.1), i parametri denominati non sono stati supportati.

Invece, diventa necessario utilizzare i parametri posizionali. Questi possono essere espressi in due modi - esplicitamente e implicitamente.

Indice esplicito

Segna il parametro utilizzando ?1 (o un altro numero). Questo indice può essere utilizzato per identificare in modo univoco tale parametro particolare nella tua 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

Segna il parametro usando solo ?. Il suo indice sarà basato sulla sequenza di tutti i parametri che partecipano alla 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:

    .
  • I parametri posizionali sono 1-indicizzati.
  • La chiave nella mappa dei parametri Query è semplicemente l'indice del parametro posizionale.

.

Fonti aggiuntive

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top