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 :

Génération BD avec JPA


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 32
    Par défaut Génération BD avec JPA
    Bonjour .

    je suis entrain d'essayer de générer une BD grâce aux annotation jpa de hibernate je problème c'est les one to many , many to one

    Je trouve pas d'exercice avec corrigé pour bien comprendre

    j'essaye en ce moment de générer cette BD



    j'ai pu faire cela mais je m'endort pas avec les relation entre table
    Class Hotel
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    @Entity
    @Table(name="Hotel")
    public class Hotel {
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Column(name="idHotel")
    	private String idHotel;
     
     
    	@Column(name="nomHotel")
    	private String nomHotel;
     
     
    	@Column(name="adressHotel")
    	private String adressHotel;
     
     
    	@Column(name="pays")
    	private String pays;
     
    	@Column(name="region")
    	private String region;
     
    	@Column(name="ville")
    	private String ville;
     
    	@Column(name="etoile")
    	private Integer etoile;
     
     
    	@OneToMany(mappedBy="Hotel")
    	private List<Chambre> chambreList;
     
    }
    Class Client

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    @Entity
    @Table(name="Client")
    public class Client {
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Column(name="numClient")
    	private Integer numClient;
     
    	@Column(name="nameClient")
    	private String nameClient;
     
    	@Column(name="adressClient")
    	private String adressClient;
     
    	@Column(name="phoneClient")
    	private String phoneclient;
     
    	@Column(name="dateNaissance")
    	@Temporal(TemporalType.DATE)
    	private Calendar dateNaissance;
     
    	@Column(name="email")
    	private String email;
     
    	@Column(name="codePostale")
    	private Integer codePostale;
     
    	@Column(name="typeCard")
    	private String typeCard;
     
    	@Column(name="numCard")
    	private String numCard;
     
    	@Column(name="dateExpiration")
    	@Temporal(TemporalType.DATE)
    	private Calendar dateExpiration;
     
     
     
    }
    Class Reservation

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    @Entity
    @Table(name="Reservation")
    public class Reservation {
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Column(name="numReservation")
    	private Integer numChambre;
     
    	@Column(name="debutReservation")
    	@Temporal(TemporalType.DATE)
    	private Calendar debutReservation;
     
     
    	@Column(name="finReservation")
    	@Temporal(TemporalType.DATE)
    	private Calendar finReservation;
     
    	@Column(name="dateReservation")
    	@Temporal(TemporalType.DATE)
    	private Calendar datereservation;
     
     
    	@Column(name="prix")
    	private Double prix;
     
     
    	@Column(name="libelleReservation")
    	private String libelleReservation;
     
     
    	@OneToMany(mappedBy="Reservation")
    	private List<Client> ClientList;
     
    }
    Class 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
    16
    17
    18
    19
    20
    21
    @Entity
    @Table(name="Chambre")
    public class Chambre {
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Column(name="numChambre")
    	private Integer numChambre;
     
    	@Column(name="prixChambre")
    	private Double prixChambre;
     
    	@Column(name="nombreLit")
    	private Integer nombreLit;
     
    	@Column(name="disponible")
    	private boolean disponible;
     
    	@OneToMany(mappedBy="Chambre")
    	private List<Reservation> reservationList;
     
    }
    Class ChaineHotel

    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="ChaineHotel")
    public class ChaineHotel {
    	@Id
    	@GeneratedValue(strategy=GenerationType.AUTO)
    	@Column(name="codeChaine")
    	private Integer codeChaine;
     
    	@Column(name="nomChaine")
    	private String nomChaine;
     
    }


    Si c'est possible de m'éclairer sur les relation entre tables

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	@OneToMany(mappedBy="Hotel")
    	private List<Chambre> chambreList;
    mappedBy ne précisse pas quelle classe gère la relation mais "quelle propriété dans l'autre classe est utilisée pour gérer la relation. Ainsi tu devrais normalement avoir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Hotel {
    	@OneToMany(mappedBy="hotel")
    	private List<Chambre> chambreList;
    }
     
    public class Chambre {
           @ManyToOne
           private Hotel hotel;
    }
    si tu ne veux pas de propriété Hotel dans Chambre (relation unidirectionelle), ca deviendrais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Hotel {
        @OneToMany(orphanRemoval=true)
        @JoinColumn(name="HOTEL_ID") // colonne HOTEL_ID dans table CHAMBRE
        private List<Chambre> chambreList;
    }

  3. #3
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 32
    Par défaut
    oula super compliquer tous ça :s ou bien ça vient su fait que j'ai pas fermer l'oeil depuis 48h

    je vais essayer d'étudier cela merci et je me demandais si c'était possible de me procurez une petite correction que je pourrais utiliser pour comprendre

  4. #4
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 32
    Par défaut
    Personne ne sait résoudre cet éxércice ??? je déprime la !!

  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
    Pour la relation Hotel-Client, il n'y a pas de lien (selon le schéma UML) entre ces deux entités. Ne ne comprend pas l'intérêt de ce bout de code dans la classe client:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @OneToMany(mappedBy="Hotel")
    	private List<Chambre> chambreList;
    Faisons le premier lien:
    Lien Client-Réservation (si je comprend bien, à un client 0-N réservation mais à une réservation un client).

    Dans la classe Client, tu vas avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @OneToMany(fetch=FetchType.Eager,mappedBy="client")
    private Set<Reservation> reservations
    OneToMany car à un client correspond plusieurs réservations.
    mappedBy:voir plus loin.
    Un Set est généralement préféré à une List.
    Et fetch=FetchType.Eager signifie que quand tu chargera le client tu chargera en mémoire toutes ses réservations. Si tu ne le souhaite pas, tu remplace FetchType.Eager par FetchType.Lazy.

    Ensuite, dans la classe Reservation, tu as:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="id_client",nullable=false)
    private Client client
    Comme ça, tu mappes, la join column signifie que tu auras dans la table client de la BDD une colonne id_client correspondant à une clé secondaire.
    nullable=false signifie que dans la BDD, cette colonne ne pourras pas être nulle.

    Pour conclure, je pense qu'il faut voir Hibernate comme un framework ORM, qui va faire le lien entre le modèle objet côté Java et le modèle relationnel dans la base.

    C'est pour ça que la meilleur façon d'aborder les chose est d'avoir le modèle objet, de faire parallèlement le modèle relationnel, et de voir si les deux sont optimisé et que le lien entre les deux est correct.

    Je te laisse faire les autres relations.

  6. #6
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 32
    Par défaut
    Gros merci je commence a comprendre maintenant tous ça et ça marche !!!

    je voudrais savoir l'intérêt d'utiliser JPA pour générer la base quél différence entre ça et la manière normal (SGBD)

    encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/04/2009, 09h35
  2. Génération DLL avec 2 fichiers .lib
    Par JeanPhi dans le forum MFC
    Réponses: 7
    Dernier message: 27/08/2007, 12h02
  3. Génération war avec inclusion de ressource .jar
    Par Eric45 dans le forum Maven
    Réponses: 1
    Dernier message: 07/06/2007, 15h47
  4. Problème génération javadoc avec Eclipse
    Par pontus21 dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 05/01/2007, 00h24
  5. Réponses: 1
    Dernier message: 03/02/2006, 10h48

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