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

JPA Java Discussion :

Récupérer une valeur d'une table intermédiaire @ManyToMany


Sujet :

JPA Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Septembre 2016
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Septembre 2016
    Messages : 52
    Points : 38
    Points
    38
    Par défaut Récupérer une valeur d'une table intermédiaire @ManyToMany
    Bonjour à tous ! Je bloque...

    J'ai dans ma base de donnée MySQL une table "voiture" et une autre table "option_voiture" (les options que chaque voitures contiennent). Ce qui crée donc une table intermédiaire @ManyToMany qui s'appelle "option_comprise_voiture".

    Le problème est que je ne trouve pas le moyen d'accéder à un attribut qui s'appelle "quantite" que j'ai mit dans cette table intermédiaire à l'aide de JPA - JSP... Je pensais que cela allait être simple jusqu'à ce que je voit que sur google il y a 56 000 tutos et aucuns qui explique de manière simple le moyen de récupérer une valeur d'une table intermédiaire.

    Je suis novice, j'espère vraiment que vous saurez m'aider là dessus, je vous donne le code que j'ai.

    mon schéma:
    Nom : MLD 03-06.jpg
Affichages : 855
Taille : 127,1 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
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
     
     
     
    /**
     * The persistent class for the voiture database table.
     * 
     */
    @Entity
    @NamedQuery(name="Voiture.findAll", query="SELECT v FROM Voiture v")
    public class Voiture implements Serializable {
    	private static final long serialVersionUID = 1L;
     
    	@Id
    	@GeneratedValue(strategy=GenerationType.IDENTITY)
    	private int identifiant;
     
    	private int annee;
     
    	private int boite_vitesse;
     
    	private String nom;
     
    	private float prix;
     
    	//bi-directional many-to-many association to Reservation
    	@ManyToMany(mappedBy="voitures")
    	private List<Reservation> reservations;
     
    	//bi-directional many-to-one association to Agence
    	@ManyToOne
    	@JoinColumn(name="FK_agence")
    	private Agence agence;
     
    	//bi-directional many-to-one association to Categorie
    	@ManyToOne
    	@JoinColumn(name="FK_categorie")
    	private Categorie categorie;
     
    	//bi-directional many-to-one association to Carburant
    	@ManyToOne
    	@JoinColumn(name="FK_carburant")
    	private Carburant carburant;
     
    	//bi-directional many-to-many association to OptionVoiture
    	@ManyToMany
    	@JoinTable(
    		name="option_comprise_voiture"
    		, joinColumns={
    			@JoinColumn(name="FK_voiture")
    			}
    		, inverseJoinColumns={
    			@JoinColumn(name="FK_option_voiture")
    			}
    		)
    	private List<OptionVoiture> optionVoitures;
     
    	public Voiture() {
    	}
     
    	public int getIdentifiant() {
    		return this.identifiant;
    	}
     
    	public void setIdentifiant(int identifiant) {
    		this.identifiant = identifiant;
    	}
     
    	public int getAnnee() {
    		return this.annee;
    	}
     
    	public void setAnnee(int annee) {
    		this.annee = annee;
    	}
     
    	public int getBoite_vitesse() {
    		return this.boite_vitesse;
    	}
     
    	public void setBoite_vitesse(int boite_vitesse) {
    		this.boite_vitesse = boite_vitesse;
    	}
     
    	public String getNom() {
    		return this.nom;
    	}
     
    	public void setNom(String nom) {
    		this.nom = nom;
    	}
     
    	public float getPrix() {
    		return this.prix;
    	}
     
    	public void setPrix(float prix) {
    		this.prix = prix;
    	}
     
    	public List<Reservation> getReservations() {
    		return this.reservations;
    	}
     
    	public void setReservations(List<Reservation> reservations) {
    		this.reservations = reservations;
    	}
     
    	public Agence getAgence() {
    		return this.agence;
    	}
     
    	public void setAgence(Agence agence) {
    		this.agence = agence;
    	}
     
    	public Categorie getCategorie() {
    		return this.categorie;
    	}
     
    	public void setCategorie(Categorie categorie) {
    		this.categorie = categorie;
    	}
     
    	public Carburant getCarburant() {
    		return this.carburant;
    	}
     
    	public void setCarburant(Carburant carburant) {
    		this.carburant = carburant;
    	}
     
    	public List<OptionVoiture> getOptionVoitures() {
    		return this.optionVoitures;
    	}
     
    	public void setOptionVoitures(List<OptionVoiture> optionVoitures) {
    		this.optionVoitures = optionVoitures;
    	}
     
    }
    J'arrive à récupérer tous ce que je veut, sauf cette foutu variable. J'ai peur de devoir en arriver à devoir faire une queryNative pour bêtement récupérer cette valeur. Est-ce qu'il y a un moyen de procéder à partir de ce que j'ai pour récupérer cette valeur ?

    Merci d'avance !

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    A partir du moment où tu veux une donnée en plus des 2 clés étrangères dans ta table d'association, tu vas devoir créer une entité pour option_comprise_voiture, et faire deux one-to-many.
    Le many-to-many ne fonctionne que si tu n'as pas d'autres attributs.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par fr1man Voir le message
    A partir du moment où tu veux une donnée en plus des 2 clés étrangères dans ta table d'association, tu vas devoir créer une entité pour option_comprise_voiture, et faire deux one-to-many.
    Le many-to-many ne fonctionne que si tu n'as pas d'autres attributs.

    C'est le fait d'utiliser List (ou Set) qui provoque la limitation, vous pouvez parfaitement utiliser Map<Entity1,Entity2> et même Map<Entity,SimpleType>.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Et ça donnerait quoi au niveau mapping et base de données ?
    Effectivement, j'utilise des List ou Set, jamais de Map.

    Sinon, un lien sur la question:
    https://vladmihalcea.com/the-best-wa...and-hibernate/

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    https://www.thoughts-on-java.org/map...java-util-map/
    https://www.logicbig.com/tutorials/j...tity-keys.html
    https://www.logicbig.com/tutorials/j...nd-values.html

    Le chapitre 5 de "Pro JPA 2, mastering the Java persistence APi" chez APress, on trouve le pdf facilement.

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ca me semble un peu tordu comme méthode.
    A mon avis, la solution de rajouter une entité me semble plus claire.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [WD16] Récupérer la valeur d'une colonne d'une table d'une ligne précise
    Par elghers_hocine dans le forum WinDev
    Réponses: 16
    Dernier message: 06/05/2011, 18h11
  3. [AC-2003] Récupérer la Valeur d une requete dans une table
    Par mongmc dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/02/2011, 17h53
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. passer une valeur d'une requête a une table
    Par LesLemmings dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 09/06/2006, 14h13

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