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 :

Mapping à créer sur plusieurs tables existantes


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Par défaut Mapping à créer sur plusieurs tables existantes
    Bonjour,

    je dois mapper une relation one-to-many sur 3 tables (dont une de jointure), mais les tables ont été créées bizarrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    EST_STUDY
    ID
     
    EST_REVISION
    ID                - REVISION_ID (EST_REVISION_LANGUAGE)
    STUDY_ID          - ID (EST_STUDY)
     
    EST_REVISION_LANGUAGE
    ID
    REVISION_ID
    Normalement, on doit référencer les clés primaires des deux autres tables dans la table de jointure, mais ce n'est pas le cas ici. Sauriez-vous comment contourner le problème en utilisant des fichiers hbm.xml ?

    J'aimerai éviter de modifier la structure des tables car cela aurait un impact sur plusieurs environnements.

    D'avance merci

  2. #2
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 486
    Billets dans le blog
    5
    Par défaut
    Un modèle UML et/ou des classes et/ou des fichier hbm.xml serait bien venu pour pouvoir t'aider.

    Par ailleurs, il ne me semble pas qu'il y ait, dans le cas d'un oneToMany des tables de jointures.

    Si on a par exemple un hôtel a plusieurs chambres.

    Hôtel 1<-> 1-N Chambre

    BDD, on aura:

    Table Hôtel
    id_hotel

    Table Chambre
    id_chambre
    id_hotel (clé étrangère).

    Côté Java (en ce qui me concerne, j'utilise les annotations JPA), on aura:
    Classe Hôtel, Classe Chambre, soit:
    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
     
    @Entity
    @Table(name="hotel")
    public class Hotel implements Serializable{
     
            @Id
    	@GeneratedValue
    	@Column(name="id_hotel",length=3)
    	private Integer idHotel;    
     
            @OneToMany(fetch=FetchType.LAZY,mappedBy="hotel")
    	private Set<Chambre> chambre;
     
            //Le reste dont Getter Setter
    }
    One To Many car à un Hôtel (One) correspond plusieurs (Many) Chambre.

    Pour la classe Chambre
    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
     
    @Entity
    @Table(name="chambre")
    public class Chambre implements Serializable{
            @Id
    	@GeneratedValue
    	@Column(name="id_chambre",length=3)
    	private Integer idChambre;
     
            @ManyToOne(fetch=FetchType.EAGER)
    	@JoinColumn(name="id_hotel",nullable=true)
    	private Hotel hotel;
     
             //Le reste dont Getter Setter
    }
    Le mappedBy="hotel" permet de faire le mapping entre les deux classes et leurs équivalents dans la base de donnée.

    Je pense qu'il est possible de faire avec des fichier .hbm.xml l'équivalent de ce qui est fait avec les annotations.

  3. #3
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 486
    Billets dans le blog
    5
    Par défaut
    Ton problème ne serait-il pas plutôt un ManyToMany?

    Par exemple, soit:
    restaurant 0-n <-> 0-N plat

    Dans la base de donnée, on aura 3 tables (dont une de jointure).

    Table restaurant
    id_restaurant

    Table plat
    id_plat

    Table restaurant_plat (jointure)
    id_restaurant
    id_plat

    Sur ce, cela fait 2 classes java.

    La classe Restaurant
    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
     
    @Entity
    @Table(name="restaurant")
    public class Restaurant implements Serializable{
     
            @Id
    	@GeneratedValue
    	@Column(name="id_restaurant",length=3)
    	private Integer idRestaurant;  
     
            @ManyToMany(fetch=FetchType.EAGER)	
    @JoinTable(name="restaurant_plat",joinColumns=@JoinColumn(name="id_restaurant"),inverseJoinColumns=@JoinColumn(name="id_plat"))
    	private Set<Plat> plats;
     
            //Le reste dont Getter Setter
    Et la classe Plat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @Entity
    @Table(name="plat")
    public class Plat implements Serializable{
     
            @Id
    	@GeneratedValue
    	@Column(name="id_plat",length=3)
    	private Integer idPlat;  
     
            @ManyToMany(fetch=FetchType.LAZY,mappedBy="plats")
    	private Set<Restaurant> restaurants;
     
            //Le reste dont Getter Setter

  4. #4
    Membre éclairé
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Par défaut
    Merci pour ta réponse, mais il s'agit bien d'un OneToMany que je recherche.

    EST_STUDY 1 <-> N EST_REVISION_LANGUAGE.

    La base de données n'est pas bonne, mais déjà existante. Je cherche un moyen de simplifier (automatiser pour être exact) mes queries. J'aimerai éviter de devoir spécifier les jointures,... Que Hibernate s'y retrouve avec les déclarations hbm.

  5. #5
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 486
    Billets dans le blog
    5
    Par défaut
    Dans ce cas, n'as tu pas plutôt une relation Ternaire (avec une solution ici)?

Discussions similaires

  1. Créer un sous-formulaire basé sur plusieurs tables
    Par manou1310 dans le forum Oracle
    Réponses: 2
    Dernier message: 19/12/2011, 20h52
  2. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  3. order by sur plusieurs tables
    Par Mad_Max dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/12/2003, 12h17
  4. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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