Hibernate, EJBQL, SQL : je m'y perd !
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é :
Code:
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);
} |
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:
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 |
Code:
1 2 3 4 5 6
| public ListeStages()
{
setEjbql(EJBQL);
setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));
setMaxResults(25); |
Je me retrouve avec l'erreur suivante :
Citation:
java.lang.NumberFormatException: For input string: "ssnLibelle"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
Alors que ssnLibelle est bien sûr un VARCHAR dans la BDD et un String dans l'entité java ! 8O
EDIT :
Comme ThStageStg hérite de TeSessionSsn, j'ai essayé avec la requête suivante mais même erreur !
Code:
1 2 3
| private static final String EJBQL =
"SELECT stg.ssnId, stg.ssnLibelle, stg.ssnDateDebut, stg.ssnDateFin " +
"FROM ThStageStg stg "; |
EDIT2 :
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 ?