View Full Version : [JAVA EE] PROBLEMA QUERY EJBQL
SUPERALEX
18-01-2011, 19:13
Ciao ho un problema con una query in ejbql...allora ho un'entità Corso che ha un arraylist di Studente che sono gli iscritti al corso...dato uno studente,devo estarre tutti i corsi nei queli lo studente non è iscritto...io ho fatto così:
Query q = manager.createQuery("SELECT c FROM Corso c JOIN c.iscritti i WHERE i<>?1 ");
q.setParameter(1, s);
dove s è l'entità studente passata...tenete conto che da un'altra parte ho la query x ottenere i corsi nei quali è iscritto ed è identica tranne x il WHERE finale dove c'è = invece che <> e funziona perfettamente...
avevo provato anche con
Query q = manager.createQuery("SELECT c FROM Corso c WHERE NOT EXISTS(SELECT c1 FROM Corso c1 JOIN c1.iscritti i WHERE i=?1) ");
q.setParameter(1, s);
ma nn va uguale...probabilmente sarà una scemata ma nn ne vengo a capo
SUPERALEX
19-01-2011, 13:29
nessuno?
javacomelava
21-01-2011, 11:53
EDIT: OPS...Non avevo letto bene la domanda che avevi posto. La risposta che ho dato purtroppo non risponde al tuo questito. La prima cosa che mi viene in mente,evitando sql (la tua query mi sembra esatta tra l'altro), è di:
1. recuperare tutti i corsi disponibili
2. per ogni corso controllare se lo studente è iscritto
Mi rendo conto però che una query sql possa essere piu prestazionale rispetto alle operazioni java su mensionate.
Ciao
Ma perchè incasinarsi la vita con ejbql ????
Immagino che a livello di SCHEMA ENTITA' RELAZIONE le entità CORSO - STUDENTE siano in una relaziobe 1-N.
Tradotto in Annotation JPA a livelli di classi di dominio avrai qualcosa del genere:
@Entity
public class Corso{
.....
.....
@OneToMany(targetEntity=Studente.class, mappedBy="corso")
private ArrayList<Studente> studenteList;
.....
.....
// get e set di studenteList
}
@Entity
public class Studente{
...
...
...
@ManyToOne
private Corso corso;
//get e set di corso
}
Mappando in questo modo le Entity, nei tuoi Dao potrai utilizzare semplicemente JAVA per le operazioni di estrazioni dati (praticamente sql puoi quasi dimenticarlo)
/* Classe DAO */
public class StudenteDaoImpl implements StuedenteDao{
........
........
protected EntityManager em;
public StudenteDaoImpl(EntityManager em){
this.em = em;
}
....
public ArrayList<Studente> prelevaStudentiIscrittiAlCorso(int codiceCorso){
ArrayList<Studente> result = new ArrayList<Studente>();
//Preleva il corso tramite la sua primary key
Corso corso = this.em.find(Corso.class,codiceCorso);
//Preleva tutti gli studenti iscritti al corso (relazione 1.N mappata dalle entity)
result = corso.getStudenteList();
return result;
}
....
....
}
N.B.: Questa è solo una delle molteplici possibilità di mappaggio delle entity. Ti basta una ricerca su google,ti si aprirà un mondo.
Saluti
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.