Bonjour les hibernautes !
Je maîtrise bien SQL mais je galère avec l'utilisation des dialectes HQL ou EJBQL dans Seam et je ne sais plus où poster pour avoir une réponse !
Comme expliqué dans ce message du forum Seam, resté sans réponse, j'arrive à afficher toutes les lignes résultats avec un simple EntityQuery sur une entité :
La requête SQL dont j'ai réellement besoin d'afficher le résultat restreint les lignes de l'entité aux stages de la discipline correspondant à celle du concours qu'a passé l'étudiant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 @Name("listeStages") public class ListeStages extends EntityQuery<ThStageStg> { private static final String EJBQL = "select thStageStg from ThStageStg thStageStg"; private static final String[] RESTRICTIONS = {}; public ListeStages() { setEjbql(EJBQL); setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS)); setMaxResults(25); }
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT ssn.ssn_id, ssn.ssn_libelle, ssn.ssn_date_debut, ssn.ssn_date_fin, cmn.cmn_nom, dpt.dpt_numero, rgn.rgn_nom FROM te_session_ssn ssn INNER JOIN th_stage_stg stg ON stg.stg_id_session = ssn.ssn_id INNER JOIN te_etablissement_etb etb ON etb.etb_id = stg.stg_id_etablissement INNER JOIN tr_commune_cmn cmn ON cmn.cmn_id = etb.etb_id_commune INNER JOIN tr_departement_dpt dpt ON dpt.dpt_id = cmn.cmn_id_departement INNER JOIN tr_region_rgn rgn ON rgn.rgn_id = dpt.dpt_id_region INNER JOIN tj_stg_concerner_dsc_scd scd ON scd.scd_id_stage = stg.stg_id_session INNER JOIN te_discipline_dsc dsc ON dsc.dsc_id = scd.scd_id_discipline INNER JOIN te_concours_ccr ccr ON ccr.ccr_id_discipline = dsc.dsc_id INNER JOIN th_etudiant_etu etu ON etu.etu_id_concours = ccr.ccr_id WHERE etu.etu_id_candidat = :idEtudiant
Je me retrouve avec l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public ListeStages() { setEjbql(EJBQL); setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS)); setMaxResults(25);
Alors que ssnLibelle est bien sûr un VARCHAR dans la BDD et un String dans l'entité java !java.lang.NumberFormatException: For input string: "ssnLibelle"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
EDIT :
Comme ThStageStg hérite de TeSessionSsn, j'ai essayé avec la requête suivante mais même erreur !
EDIT2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 private static final String EJBQL = "SELECT stg.ssnId, stg.ssnLibelle, stg.ssnDateDebut, stg.ssnDateFin " + "FROM ThStageStg stg ";
D'après ce que je comprends en lisant la doc, on ne peut pas spécifier les noms de colonnes dans le SELECT.
Quelqu'un confirme ?
Si c'est ça c'est nul EJBQL !
Y a t-il un équivalent à EntityQuery avec Hibernate ou, encore mieux, en SQL natif ?
Partager