IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Hibernate, EJBQL, SQL : je m'y perd !


Sujet :

Hibernate Java

  1. #1
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut 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 : 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 ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    J'ai fini par y arriver !
    La requête EJBQL équivalente à ma grosse requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        private static final String EJBQL = 
            "SELECT thStageStg " +
            "FROM ThStageStg thStageStg, " +
                "IN(thStageStg.teDisciplineDscs) dsc, " +
                "IN(dsc.teConcoursCcrs) ccr, " +
                "IN(ccr.thEtudiantEtus) etu ";
     
        private static final String[] RESTRICTIONS = {"etu.utiLogin = #{credentials.username}"};
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SGBD] Connexion de Eclipse (Hibernate) vers SQL Server
    Par Michel38 dans le forum Hibernate
    Réponses: 4
    Dernier message: 11/03/2012, 16h39
  2. configuration Hibernate et SQL server Express 2005
    Par K-Kaï dans le forum Hibernate
    Réponses: 9
    Dernier message: 28/03/2008, 18h58
  3. Hibernate avec SQL Server
    Par Premium dans le forum Hibernate
    Réponses: 1
    Dernier message: 25/05/2007, 15h24
  4. [hibernate]requete SQL qui ne passe pas
    Par Gromitou dans le forum Hibernate
    Réponses: 8
    Dernier message: 09/06/2006, 12h18
  5. [Hibernate] Connexion SQL Server authentification windows
    Par Michel38 dans le forum Hibernate
    Réponses: 3
    Dernier message: 09/01/2006, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo