|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
[JPQL] Consiglio query avanzata
Ciao a tutti
devo creare una query scritta in JPQL che possa gestire gli oggetti di un Database relazionale. Ho già la classe che rappresenta la tabella del mio DB mappata con gli opportuni campi e anche il WS che gestisce la richiesta GET che fa uso di un oggetto EntityManager (quello che gestisce le operazioni di persistenza con i DataBase). Ho una query SQL che dichiara 3 "variabili" che possono cambiare per ogni nuova richiesta. La struttura è così Codice:
@var1 = "valore Che Può Cambiare Proveniente Dalla Richiesta Del Client"; @var2 = "valore Che Può Cambiare Proveniente Dalla Richiesta Del Client"; @var3 = "valore Che Può Cambiare Proveniente Dalla Richiesta Del Client"; select * , "qui ho una formula matematica che fa uso delle variabili var1 e var2" as "Alias" from "Tabella" "nomeAliasTabella" having "Alias" < @var3 order by "Alias" limit 10; Grazie mille!!!
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit Ultima modifica di Helldron : 27-06-2010 alle 20:15. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
Nessun consiglio??
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Ciao, se crei la query programmaticamente, tipo
Codice:
int id=1;
Query q = entityManager.createQuery("select p from Persona p where p.id = ?1);
q.setParameter(1, id);
In alternativa, puoi usare le @NamedQuery, ti consiglio di guardarti un pò di documentazioni se vuoi andare nello specifico.
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
Quote:
Codice:
setParameter("Value",Object)
Grazie
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Possiamo continuare anche qui, può essere utile anche agli altri.
Come ti dicevo, ognuno dei parametri da passare alla query può essere utilizzando facendo il setParameter(), meglio ancora se sono tipi "semplici". Ciao
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
Quote:
Mi chiedo: come poter scriverla in questo linguaggio senza avere queste istruzioni?? Avevi parlato a proposito del dividere la query, potrebbe essere una soluzione??
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Quote:
Hai due possibilità : 1) Calcolare via java, fuori dalla query i valori ottenuti utilizzando le funzioni matematiche (al massimo potresti usare una qualche libreria matematica esterna se ti serve qualcosa di più potente della java.math.*) e poi inserire i valori ottenuti dentro la query come se fossero valori singoli. Ad esempio fai : double powerSin = ASIN(SQRT( POWER(SIN((x - abs(a)) * pi()/180 / 2), 2) + COS(@orig_lat * pi()/180 ) * COS(abs(y) * pi()/180) * POWER(SIN((b - dest.lon) * pi()/180 / 2), 2) )); e poi passare la variabile powerSin dentro la query con il solito setParameter() 2)Utilizzare le query native. JPA infatti permette, di usare query SQL standard. Il metodo Codice:
public Query createNativeQuery( String sqlString,Class result-class); Dovresti leggere la documentazione per approfondire, io sinceramente non le ho mai usate. Facci sapere come va a finire.
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 2007
Messaggi: 411
|
Ok grazie per le dritte, proverò e ti farò sapere..
__________________
MOTHERBOARD Asus P5Q-Pro - CPU intel Core 2 Quad Q9550 2.8 Ghz 12 MB Cache - VGA Sapphire Radeon HD4870 512 MB - HD Seagate Barracuda 7200 500GB 32 MB - RAM 4 GB ocz platinum DDR2 pc6400 800 Mhz @5-4-4 - ALIM Enermax 620W - CASE Enermax Chakra - OS Windows 7 Professional 64bit |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:09.




















