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 :

Que pensez vous de mon mapping Hibernate?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Par défaut Que pensez vous de mon mapping Hibernate?
    Bonjour,

    J'aimerai avoir votre avis sur le mapping des tables de ma base de donnée sous hibernate.

    Mon model de base de donnée


    Le choix d'implémentation


    Le mapping (en User.java)
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    @Entity
    @Inheritance(strategy = InheritanceType.JOINED)
    @Table(name = "user", catalog = "portailweb", uniqueConstraints = @UniqueConstraint(columnNames = "login"))
    public class User implements java.io.Serializable {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	protected int idUser;
    	protected String login;
    	protected String password;
     
    	public User() {
    	}
     
    	public User(int idUser, String login, String password) {
    		this.idUser = idUser;
    		this.login = login;
    		this.password = password;
    	}
     
    	public User(int idUser, String login, String password,
    			ClientUser clientUser) {
    		this.idUser = idUser;
    		this.login = login;
    		this.password = password;
    		this.clientUser = clientUser;
    	}
     
    	@Id
    	@Column(name = "id_user", unique = true, nullable = false)
    	public int getIdUser() {
    		return this.idUser;
    	}
     
    	public void setIdUser(int idUser) {
    		this.idUser = idUser;
    	}
     
    	@Column(name = "login", unique = true, nullable = false, length = 20)
    	public String getLogin() {
    		return this.login;
    	}
     
    	public void setLogin(String login) {
    		this.login = login;
    	}
     
    	@Column(name = "password", nullable = false, length = 20)
    	public String getPassword() {
    		return this.password;
    	}
     
    	public void setPassword(String password) {
    		this.password = password;
    	}
    }
    Mapping ClientUser.java
    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
     
    @Entity
    @Table(name = "client_user", catalog = "portailweb")
    public class ClientUser extends User implements java.io.Serializable {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private Client client;
     
    	public ClientUser() {
    	}
     
    	public ClientUser(Client client) {
    		this.client = client;
    	}
     
    	@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    	@JoinColumn(name = "id_client", nullable = false)
    	public Client getClient() {
    		return this.client;
    	}
     
    	public void setClient(Client client) {
    		this.client = client;
    	}
    }
    Mapping Client.java
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    @Entity
    @Table(name = "client", catalog = "portailweb")
    public class Client implements java.io.Serializable {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private int idClient;
    	private String nom;
    	private ClientUser clientUser;
     
    	public Client() {
    	}
     
    	public Client(int idClient, String nom) {
    		this.idClient = idClient;
    		this.nom = nom;
    	}
     
    	public Client(int idClient, String nom, ClientUser clientUser) {
    		this.idClient = idClient;
    		this.nom = nom;
    		this.clientUser = clientUser;
    	}
     
    	@Id
    	@Column(name = "id_client", unique = true, nullable = false)
    	public int getIdClient() {
    		return this.idClient;
    	}
     
    	public void setIdClient(int idClient) {
    		this.idClient = idClient;
    	}
     
    	@Column(name = "nom", nullable = false)
    	public String getNom() {
    		return this.nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	@OneToOne(fetch = FetchType.LAZY, mappedBy = "client")
    	public ClientUser getClientUser() {
    		return this.clientUser;
    	}
     
    	public void setClientUser(ClientUser clientUser) {
    		this.clientUser = clientUser;
    	}
    }
    En fait je rencontre un petit bug au niveau de mon application et je voudrai savoir si c'est mon mapping qui est en cause ou autre chose.

    Merci de votre temps

  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
    ClientUser est une table de jointure servant à faire du many to many entre Client et User, elle n'a pas besoin d'exister en tant que classe, sauf pour voir compliquer là vie. Hibernate peut déjà gérer du many-to-many avec une table de jointure

    Voir le chapitre d"hibernate sur les relation many to many pour les détails.

    Exemple tiré de la doc:
    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
    @Entity
    public class Employer implements Serializable {
        @ManyToMany(
            targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
            cascade={CascadeType.PERSIST, CascadeType.MERGE}
        )
        @JoinTable(
            name="EMPLOYER_EMPLOYEE",
            joinColumns=@JoinColumn(name="EMPER_ID"),
            inverseJoinColumns=@JoinColumn(name="EMPEE_ID")
        )
        public Collection getEmployees() {
            return employees;
        }
        ...
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Entity
    public class Employee implements Serializable {
        @ManyToMany(
            cascade = {CascadeType.PERSIST, CascadeType.MERGE},
            mappedBy = "employees",
            targetEntity = Employer.class
        )
        public Collection getEmployers() {
            return employers;
        }
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 28
    Par défaut ClientUser est une class hérité
    En fait j'utilise ClientUser pour mappé l'héritage dans hibernate (doc hibernate 3.5 2.2.4.3. Joined subclasses).

    parce que j'ai 2 types d'utilisateurs, les simples User et les ClientUser. Cependant pour des raisons de conception, je ne dois pas mélanger les tables d'identifications au table traitement (cf Client)

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

Discussions similaires

  1. que pensez vous de mon site http://www.tout57.fr
    Par alain57 dans le forum Mon site
    Réponses: 4
    Dernier message: 21/01/2007, 12h47
  2. [Avis] Que pensez-vous de mon C.V.
    Par skynet dans le forum CV
    Réponses: 22
    Dernier message: 30/09/2006, 18h49
  3. Réponses: 11
    Dernier message: 09/09/2006, 15h54
  4. [SGBD/MLD]Que pensez vous de mon MLD?
    Par Bils dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 29/03/2006, 16h50
  5. que pensez vous de mon code source ecrit en c++(je debute)
    Par superspike23 dans le forum Débuter
    Réponses: 6
    Dernier message: 06/10/2005, 18h26

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