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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    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
    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, 13h36
  2. Jointure entre plusieurs tables
    Par cell dans le forum Pentaho
    Réponses: 7
    Dernier message: 25/03/2010, 12h30
  3. Réponses: 2
    Dernier message: 23/10/2009, 15h02
  4. Probleme Jointure entre 2 tables
    Par backdraf dans le forum Développement
    Réponses: 3
    Dernier message: 24/04/2009, 16h54
  5. Problème de Jointure entre plusieurs tables
    Par Stouille89 dans le forum JDBC
    Réponses: 12
    Dernier message: 11/12/2007, 14h16

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