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 : 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);
    }
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 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

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);
Je me retrouve avec l'erreur suivante :
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 !

EDIT :
Comme ThStageStg hérite de TeSessionSsn, j'ai essayé avec la requête suivante mais même erreur !
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 ";
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 ?