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 :

[ Débutant HQL] jointure


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 85
    Par défaut [ Débutant HQL] jointure
    Bonjout tout le monde,
    J'ai une classe Personne qui a un attribut de tye Sexe. Personne et Sexe etant deux tables dans ma BD.
    j'aimerai faire une requête select telque le l'objet Sexe est égal à un autre objet que je fournit à la requete.
    j'ai ecris la requete suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    from Personne as pers where pers.sexe=sexe
    Quand j'ai executé la requete j'ai obtenu l'exception suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing:  hibernate.entities.Sexe
    Est ce que c'est possible de comparer lors d'une jointure des objets ou je dois comparer les attribut. cad : where pers.sexe.param1= sexe.param1 and pers.sexe.param2=sexe.param2 ?

  2. #2
    Membre expérimenté Avatar de mOuLi
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Par défaut
    A priori l'utilisation de l'opérateur '=' entre 2 objets (par opposition avec l'égalité au niveau d'une propriété d'un objet) n'est possible qu'à partir du moment où les éléments sont présents en base (cf paragraphe 14.8 de la doc de référence avec des exemples de requêtes) même si je trouve que ça n'est pas très limpide (personnellement je ne l'ai jamais mis en place).

    Apparemment ton traitement récupère en paramètre en entrée un objet de type Sexe que tu tentes d'intégrer tel quel dans ton HQL et Hibernate râle parce que ton objet n'est pas enregistré en base (save the transient instance ...).
    Donc tu devrais plutôt faire la comparaison champ à champ. Pour simplifier cela, tu peux éventuellement utiliser les Query By Example (cf paragraphe 15.6 de la doc de référence).

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    Query query = session.createQuery("from Personne pers where pers.sexe = :sexe);
    query.setParameter("sexe", sexe);
    ...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 85
    Par défaut
    Merci mOuli et OButterlin pour vos réponses.
    OButterlin, est ce que tu veux dire que session.createQuery résout le probleme ?

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Ton exception vient du fait que tu n'as pas "sauvegardé" ton objet Sexe (Transient) et que tu veux l'associer à ton objet Personne (je suppose que tu n'as pas de cascade sur la relation ManyToOne impliquée)

    Donc, non, le createQuery ne devrait pas règler ton problème mais plutôt soit :
    - la modification de l'attribut cascade
    - la modification du code pour sauvegarder l'objet Sexe avant

    J'avais cru comprendre que tu ne savais pas faire un Query impliquant un objet dans l'expression de la sélection, autant pour moi...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Hibernate HQL (jointure)
    Par bestcasaoui dans le forum Hibernate
    Réponses: 1
    Dernier message: 01/07/2014, 08h08
  2. [Débutant / EclispseLink] Jointure JPQL
    Par SuperArbre dans le forum JPA
    Réponses: 0
    Dernier message: 21/03/2013, 19h40
  3. [HQL] jointure implicite dans un sous-select
    Par Manopower dans le forum Hibernate
    Réponses: 1
    Dernier message: 09/09/2009, 11h45
  4. [HQL] jointure et valeur de retour
    Par Nexussmb dans le forum Hibernate
    Réponses: 1
    Dernier message: 02/07/2008, 13h08
  5. Débutant en jointure
    Par DaD92 dans le forum Langage SQL
    Réponses: 18
    Dernier message: 27/06/2008, 18h34

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