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

Spring Java Discussion :

Annotation Many to Many - table intermediaire à 3 colonnes [Data]


Sujet :

Spring Java

  1. #1
    Membre régulier
    Homme Profil pro
    Dév
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Par défaut Annotation Many to Many - table intermediaire à 3 colonnes
    Hello =)


    Diagramme de classe :

    (Pour les cardinalités que j'ai oublié, il s'agit d'une relation many to many)


    Base de données associée :



    Quelles sont les annotations à utiliser dans mes 3 beans ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "Utilisateur_Block", 
    joinColumns = { @JoinColumn(name = "utilisateur_id") }, 
    inverseJoinColumns = { @JoinColumn(name = "block_id") })
    Je le mets où mon permission_id ?

    Merci d'avance à tout ceux qui prendront le temps d'analyser mon problème.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Salut,
    la relation ManyToMany s'éffectue entre 2 tables avec une autre table intermédiare, mais la tu as 3 tables, quelles tables est liée à quelles tables?
    Si tu fais Utilisateur_Block donc c'est une relation entre la table Utilisateur et Block, donc tu crées des colonnes 6 colonnes dans ta table Utilisateur_Block et les joindre 2 par 2. Mais le plus corecte même si je ne connais pas trop tes besoins, tu dois à mon avis avoir un autre getter et setter pour les tables Permission et Utilisateur, et un autre pour Block et Permission. Enfin c'est à toi de voir selon tes besoin.

  3. #3
    Membre régulier
    Homme Profil pro
    Dév
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Par défaut
    Hello et merci de ta réponse.

    Citation Envoyé par ray_fab Voir le message
    quelles tables est liée à quelles tables?
    Je l'ai mis dans le diagramme de classe :

    Un utilisateur a accès à un bloc du site, mais selon des permissions particulières. Je vais donc avoir, comme tu l'as dis, une table intermédiaire entre Utilisateur et Block, avec les champs suivants :
    id_utilisateur
    id_block

    Mais comment faire pour prendre en compte les permissions ? (et de façon optimisée pour la Bd).

    En théorie, au niveau SQL, ça serait :
    id_utilisateur
    id_block
    id_permission


    Mais dans ce cas là, je ne vois pas comment annoter correctement mes beans Block, Utilisateur et Permission.

    Pour l'instant j'ai fait comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Block {
     
    private Map<Utilisateur, Permission> users;
     
     
    	@MapKey(name = "Utilisateur")
    	@ManyToMany(cascade = CascadeType.ALL)
    	@JoinTable(name = "block_utilisateur", joinColumns = { @JoinColumn(name = "block_id") }, inverseJoinColumns = { @JoinColumn(name = "utilisateur_id") })
    	public Map<Utilisateur, Permission> getUsers() {
    		return users;
    	}
    Mais je ne suis pas sur que ça corresponde à ma modélisation.
    Si tu as des idées... ^^

  4. #4
    Membre régulier
    Homme Profil pro
    Dév
    Inscrit en
    Mai 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Dév

    Informations forums :
    Inscription : Mai 2011
    Messages : 8
    Par défaut
    Ok, j'ai trouvé.
    Extrait de la doc http://docs.jboss.org/hibernate/orm/...llections.html

    "example 7.11. Map key as basic type using @MapKeyColumn"

    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
    @Entity
    public class Customer {
       @Id @GeneratedValue public Integer getId() { return id; }
       public void setId(Integer id) { this.id = id; }
       private Integer id;
     
       @OneToMany @JoinTable(name="Cust_Order")
       @MapKeyColumn(name="orders_number")
       public Map<String,Order> getOrders() { return orders; }
       public void setOrders(Map<String,Order> orders) { this.orders = orders; }
       private Map<String,Order> orders;
    }
     
    @Entity
    public class Order {
       @Id @GeneratedValue public Integer getId() { return id; }
       public void setId(Integer id) { this.id = id; }
       private Integer id;
     
       public String getNumber() { return number; }
       public void setNumber(String number) { this.number = number; }
       private String number;
     
       @ManyToOne
       public Customer getCustomer() { return customer; }
       public void setCustomer(Customer customer) { this.customer = customer; }
       private Customer number;
    }

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

Discussions similaires

  1. [Core] Many-to-many uni-directionnelle - table lien jamais remplie
    Par l'Ermite Misanthrope dans le forum Hibernate
    Réponses: 7
    Dernier message: 24/04/2015, 09h26
  2. [1.x] Relation Many to Many et colonnes dans la table association
    Par PeytaWodka dans le forum Symfony
    Réponses: 11
    Dernier message: 16/05/2011, 11h26
  3. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 19h50
  4. Réponses: 3
    Dernier message: 26/02/2007, 11h14
  5. Réponses: 2
    Dernier message: 29/08/2006, 11h40

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