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 :

Mapping d'une table avec 3PK/FK


Sujet :

Spring Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Mapping d'une table avec 3PK/FK
    Bonjour,

    Pour faire court, je suis novice, et j'ai commencé le développement d'un site e-commerce. Il m'a fallu du temps avant d'être satisfait de ma bdd. Sauf, que le problème survient au mapping. J'ai essayé différentes annotations que j'ai pus trouver, mais , rien n'y fait.

    Comme vous pouvez le voir plus bas, j'ai une table detail. C'est celle-ci qui me pose problème, car elle n'a pas d'id "propre à la table" mais je joue sur 3 FK qui sont donc aussi des PK pour permettre l'unicité.

    Nom : capture.png
Affichages : 84
Taille : 50,4 Ko

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    package fr.goweb.entities;
     
    import java.io.Serializable;
    import java.util.List;
     
    import javax.persistence.CascadeType;
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    import javax.persistence.FetchType;
    import javax.persistence.ForeignKey;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    import javax.persistence.IdClass;
    import javax.persistence.JoinColumn;
    import javax.persistence.JoinTable;
    import javax.persistence.ManyToOne;
    import javax.persistence.OneToMany;
    import javax.persistence.OneToOne;
    import javax.persistence.PrimaryKeyJoinColumn;
    import javax.persistence.Table;
     
    import com.fasterxml.jackson.annotation.JsonIgnore;
    import com.fasterxml.jackson.annotation.JsonSetter;
     
    import fr.goweb.retail.entities.MCouleur;
    import fr.goweb.retail.entities.MTaille;
    import fr.goweb.retail.entities.Produit;
     
    @Entity
     
    @Table(name = "detail", catalog = "JOSE")
    public class Detail implements Serializable {
     
    	private float prix;
    	private int ttc;
     
    	private Produit produit;
    	private MCouleur mCouleur;
    	private MTaille mTaille;
     
    	public Detail() {
    		super();
    	}
     
    	public Detail(float prix) {
    		super();
    		this.prix = prix;
    	}
     
    	public float getPrix() {
    		return prix;
    	}
     
    	public int getTtc() {
    		return ttc;
    	}
     
    	@PrimaryKeyJoinColumn(name="id_produit", foreignKey=@ForeignKey(name="FK_DETAIL_PRODUIT"))
    	@ManyToOne(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
    	//@JoinColumn(name="id_produit", foreignKey=@ForeignKey(name="FK_DETAIL_PRODUIT"))
    	public Produit getProduit() {
    		return produit;
    	}
     
    	@PrimaryKeyJoinColumn(name="id_mcouleur", foreignKey=@ForeignKey(name="FK_DETAIL_MCOULEUR"))
    	@ManyToOne(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
    	//@JoinColumn(name="id_mcouleur", foreignKey=@ForeignKey(name="FK_DETAIL_MCOULEUR"))
    	public MCouleur getMCouleur() {
    		return mCouleur;
    	}
     
    	@PrimaryKeyJoinColumn(name="id_mtaille", foreignKey=@ForeignKey(name="FK_DETAIL_MTAILLE"))
    	@ManyToOne(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
    	//@JoinColumn(name="id_mtaille", foreignKey=@ForeignKey(name="FK_DETAIL_MTAILLE"))
    	public MTaille getMTaille() {
    		return mTaille;
    	}
     
    	public void setPrix(float prix) {
    		this.prix = prix;
    	}
     
    	public void setTtc(int ttc) {
    		this.ttc = ttc;
    	}
     
    	public void setProduit(Produit produit) {
    		this.produit = produit;
    	}
     
    	@JsonSetter
    	public void setMCouleur(MCouleur mCouleur) {
    		this.mCouleur = mCouleur;
    	}
     
    	@JsonSetter
    	public void setMTaille(MTaille mTaille) {
    		this.mTaille = mTaille;
    	}
     
    }

    J'ai tenter la génération des models avec hibernate, celui-ci crée 2 tables :

    detail.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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    package fr.goweb.retail.entities;
    // Generated 16 avr. 2018 15:21:15 by Hibernate Tools 5.2.3.Final
     
    import javax.persistence.AttributeOverride;
    import javax.persistence.AttributeOverrides;
    import javax.persistence.Column;
    import javax.persistence.EmbeddedId;
    import javax.persistence.Entity;
    import javax.persistence.Table;
     
    /**
     * Detail generated by hbm2java
     */
    @Entity
    @Table(name = "detail", catalog = "JOSE")
    public class Detail implements java.io.Serializable {
     
    	private DetailId id;
    	private Float prix;
    	private Float ttc;
    	private Integer stock;
     
    	public Detail() {
    	}
     
    	public Detail(DetailId id) {
    		this.id = id;
    	}
     
    	public Detail(DetailId id, Float prix, Float ttc, Integer stock) {
    		this.id = id;
    		this.prix = prix;
    		this.ttc = ttc;
    		this.stock = stock;
    	}
     
    	@EmbeddedId
    	@AttributeOverrides({
    			@AttributeOverride(name = "idProduit", column = @Column(name = "id_produit", nullable = false)),
    			@AttributeOverride(name = "idMcouleur", column = @Column(name = "id_mcouleur", nullable = false)),
    			@AttributeOverride(name = "idMtaille", column = @Column(name = "id_mtaille", nullable = false)) })
    	public DetailId getId() {
    		return this.id;
    	}
     
    	public void setId(DetailId id) {
    		this.id = id;
    	}
     
    	@Column(name = "prix", precision = 12, scale = 0)
    	public Float getPrix() {
    		return this.prix;
    	}
     
    	public void setPrix(Float prix) {
    		this.prix = prix;
    	}
     
    	@Column(name = "ttc", precision = 12, scale = 0)
    	public Float getTtc() {
    		return this.ttc;
    	}
     
    	public void setTtc(Float ttc) {
    		this.ttc = ttc;
    	}
     
    	@Column(name = "stock")
    	public Integer getStock() {
    		return this.stock;
    	}
     
    	public void setStock(Integer stock) {
    		this.stock = stock;
    	}
     
    }
    DetalId.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
     
    package fr.goweb.retail.entities;
     
    import javax.persistence.Embeddable;
    import javax.persistence.JoinColumn;
     
    @Embeddable
    public class DetailId implements java.io.Serializable {
     
    	private Produit produit;
    	private MCouleur mCouleur;
    	private MTaille mTaille;
     
    	public DetailId() {
    	}
     
    	public DetailId(Produit produit, MCouleur mCouleur, MTaille mTaille) {
    		this.produit = produit;
    		this.mCouleur = mCouleur;
    		this.mTaille = mTaille;
    	}
     
    	@JoinColumn(name = "id_produit", nullable = false)
    	public Produit getProduit() {
    		return this.produit;
    	}
     
    	public void setProduit(Produit produit) {
    		this.produit = produit;
    	}
     
    	@JoinColumn(name = "id_mcouleur", nullable = false)
    	public MCouleur getMcouleur() {
    		return this.mCouleur;
    	}
     
    	public void setMCouleur(MCouleur mCouleur) {
    		this.mCouleur = mCouleur;
    	}
     
    	@JoinColumn(name = "id_mtaille", nullable = false)
    	public MTaille getMtaille() {
    		return this.mTaille;
    	}
     
    	public void setMtaille(MTaille mTaille) {
    		this.mTaille = mTaille;
    	}
     
    }
    Je n'arrive pas à comprendre totalement pourquoi il fait comme cela.

    Est-ce qu'il est, donc, possible de créer une entité possédant 3 FK en tant que que PK ?
    La solution généré est-elle la meilleure façon de faire ?

    Merci d'avance pour vos réponses.

    EDIT: Hibernate ne génére que 4 Classes (Client, Commande, Detail -> DetailId, Produit), or j'ai 8 tables
    Images attachées Images attachées  

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/04/2009, 20h20
  2. [Access] Nom d'une table avec un espace dans SQL
    Par Corsaire dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/04/2006, 15h50
  3. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  4. remplir une table avec UTL_FILE.GET_LINE
    Par delphim dans le forum SQL
    Réponses: 9
    Dernier message: 12/03/2004, 10h15
  5. Copier Coller une ligne d'une table avec modif ?
    Par nolan76 dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/03/2004, 16h34

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