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 :

Probleme Jointure entre plusieurs tables


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 279
    Points : 102
    Points
    102
    Par défaut Probleme Jointure entre plusieurs tables
    Bonjour,

    J'esseye de transformé une requete SQL vers du HQL, cette requete est sous la forme suivante :

    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
    SELECT
     
      (certain elements de t2)
     
      FROM
      debitant t2
      INNER JOIN  debit t3  ON  t2.id_debit = t3.id
      INNER JOIN  l_debit_saci t7   ON  t3.id  = t7.id_debit AND t7.principal    = 1
      INNER JOIN  rushServices t8  ON  t7.code_acs = t8.acs
      INNER JOIN  bulletin_correction t10 ON t2.id = t10.id_debitant
      LEFT OUTER JOIN  l_debitant_complement t9 ON t2.adr_info = t9.id
      INNER JOIN  commune t6 ON  t3.adr_cc = t6.id
    WHERE
          t2.id  =  @debitant_id  AND t10.annee = @PECAnnee
    ORDER BY 
        t3.adr_cp , t2.id
    Le code HQL que j'ai esseyé de faire est le suivant :

    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
    buffer = new StringBuilder();
    buffer.append("SELECT D ");
    buffer.append("FROM " + getEntityClassName() + " D ");
    buffer.append("INNER JOIN FETCH D.debit DE ");
    buffer.append("INNER JOIN FETCH DE.sacis DS ");
    buffer.append("INNER JOIN FETCH DS.service RS ");
    buffer.append("INNER JOIN BulletinCorrectionMod.debitant BC ");
    buffer.append("LEFT OUTER JOIN D.adresseInfo DEC ");
    buffer.append("INNER JOIN FETCH DE.adresseCommune CO ");			
    buffer.append("WHERE DS.principal = 1 ");
    buffer.append("AND D.id = :debitantId ");
    buffer.append("AND DC.annee = :annee ");
    buffer.append("ORDER BY DE.adresseCodePostal, D.id");
     
    hqlQuery = session.createQuery(buffer.toString());
    hqlQuery.setInteger("debitantId", debitantId);
    hqlQuery.setInteger("annee", year);
    Ce code me retourne une erreur : Invalid path: 'BulletinCorrectionMod.debitant'

    Voici l'ensemble des DAO avec leurs relations :

    DebitantMod :

    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
    @Entity
    @Table(name = "debitant")
    public class DebitantMod implements Serializable
    {
    @Id
    @Column(name = "id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "sequence_name")
    @SequenceGenerator(name = "sequence_name", sequenceName = "debitant_id_seq")
    private Integer id = null;
     
    @Column(name = "adr_info", nullable = true)
    private Integer adresseInfo = null;
     
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_debit", nullable = false)
    private DebitMod debit = null;
     
    ....
    }
    DebitMod :

    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
    @Entity
    @Table(name = "debit")
    public class DebitMod implements Serializable
    {
    @Id
    @Column(name = "id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "sequence_name")
    @SequenceGenerator(name = "sequence_name", sequenceName = "debit_id_seq")
    private Integer id = null;
     
    @OneToMany(mappedBy = "debit", fetch = FetchType.LAZY)
    private Set<DebitantMod> debitants = null;
     
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "adr_cc", nullable = true, columnDefinition = "bpchar")
    private CommuneMod adresseCommune = null;
     
    ...
    }
    DebitSaciMod :

    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
    @Entity
    @Table(name = "l_debit_saci")
    public class DebitSaciMod implements Serializable
    {
     
    @Id
    @Column(name = "id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "sequence_name")
    @SequenceGenerator(name = "sequence_name", sequenceName = "l_debit_saci_id_seq")
    private Integer id = null;
     
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_debit", nullable = false)
    private DebitMod debit = null;
     
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "code_acs", nullable = false)
    private RushServiceMod service = null;
     
    ...
    }
    RushServiceMod :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Entity
    @Table(name = "rushservices")
    public class RushServiceMod implements Serializable
    {
     
    @Id
    @Column(name = "acs", nullable = false)
    private String acs = null;
     
    ...
    }
    BulletinCorrectionMod :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Entity
    @Table(name = "bulletin_correction")
    public class BulletinCorrectionMod implements Serializable{
     
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_debitant", nullable = false)
    private DebitantMod debitant = null;
     
    @Column(name = "annee", nullable = false)
    private Integer annee = null;
     
    ...
    }
    DebitantComplementMod :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @Entity
    @Table(name = "l_debitant_complement")
    public class DebitantComplementMod implements Serializable{
     
    @Id
    @Column(name = "id", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "sequence_name")
    @SequenceGenerator(name = "sequence_name", sequenceName = "l_debitant_complement_id_seq")
    private Integer id = null;
     
    ...
    }
    CommuneMod :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Entity
    @Table(name = "commune")
    public class CommuneMod implements Serializable
    {
     
    @Id
    @Column(name = "id", nullable = false, columnDefinition = "bpchar")
    private String id = null;
     
    ...
    }

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Dans la classe de mapping DebitantMod, tu dois avoir une relation avec la classe BulletinCorrectionMod et c'est avec cette relation que tu feras la jointure.

    A+.

Discussions similaires

  1. Réponses: 16
    Dernier message: 20/05/2015, 14h36
  2. Jointure entre plusieurs tables
    Par cell dans le forum Pentaho
    Réponses: 7
    Dernier message: 25/03/2010, 13h30
  3. Réponses: 2
    Dernier message: 23/10/2009, 16h02
  4. Probleme Jointure entre 2 tables
    Par backdraf dans le forum Développement
    Réponses: 3
    Dernier message: 24/04/2009, 17h54
  5. Problème de Jointure entre plusieurs tables
    Par Stouille89 dans le forum JDBC
    Réponses: 12
    Dernier message: 11/12/2007, 15h16

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