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

JPA Java Discussion :

Relation OneToOne en HQL


Sujet :

JPA Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Points : 34
    Points
    34
    Par défaut Relation OneToOne en HQL
    Bonjour,

    Je ne parviens pas à paramétrer mes classes pour utiliser correctement mes requêtes en HQL.

    J'ai 3 tables: reglement, moyen_paiement (id_moyen), prelevement
    id_moyen est rappatrié dans les 2 autres tables pour une relation de type 1-1. (sauf pour prelevement qui sera 0-1)

    L'idée, c'est accéder en HQL aux prélèvements d'un règlement.
    En SQL, c'est facile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select p.* from reglement r join prelevement p on r.id_moyen=p.id_moyen
    En HQL, c'est compliqué (peut être parce que j'ai mal configuré mes classes):
    Ma requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select p from reglement r inner join prelevement p where r.moyenpaie.idmoyenpaie=p.moyenpaie.idmoyenpaie
    J'obtiens l'erreur: Path expected for join!

    Mes classes (avec les parties concernées seulement):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class reglement implements java.io.Serializable {
    [...]
    	@ManyToOne
    	@JoinColumn(name = "IDMOYENPAIE")
    	@ForeignKey(name = "FK_LIGNEREGLEMENT_MOYENPAIEMENT")
    	@Fetch(FetchMode.JOIN)
    	private Moyenpaiement moyenpaie;
     
    }
     
    public class Moyenpaiement implements java.io.Serializable {
       @Id
       @Column(name = "IDMOYENPAIE",nullable=false)
       private Long idmoyenpaie;
    }
     
    public class prelevement implements java.io.Serializable {
       @ManyToOne
       @JoinColumn(name="IDMOYENPAIE")
       @ForeignKey(name="FK_DEMANDEPREL_MOYENPAIEMENT")
       @Fetch(FetchMode.JOIN)
       private Moyenpaiement moyenpaie;
    }

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    A priori tu fais des trucs beaucoup trop compliqués, que ton API doit faire pour toi déjà. Pour une relation oneToOne t'as pas du tout besoin de join, un simple get sur le champ suffit à te renvoyer une reference sur un objet mappé dans une autre classe persistante.
    Peux tu specifier simplement en francais ce que tu veux recuperer?
    Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
    mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/10/2011, 12h41
  2. [EJB3.1] Plusieurs relation OneToOne vers la même entité.
    Par piemur2000 dans le forum Java EE
    Réponses: 1
    Dernier message: 11/01/2011, 09h05
  3. probleme avec une relation OneToOne
    Par aniss77 dans le forum JPA
    Réponses: 1
    Dernier message: 01/04/2010, 22h07
  4. Réponses: 1
    Dernier message: 16/12/2008, 14h38
  5. [Nhibernate] Relation OneToOne
    Par Vercity dans le forum NHibernate
    Réponses: 1
    Dernier message: 12/03/2007, 11h36

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