1 pièce(s) jointe(s)
[mapping] Entité ManyToMany avec un attribut supplémentaire.
Bonsoir à tous,
alors ce sujet est une continuité de https://www.developpez.net/forums/d2...nytomany-meme/
Mais, elle est légèrement différentes car nous n'avons plus de ManyToMany ...
J'ai désormais ceci :
La classe ChoixId qui sert à schématiser la clé composite:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
//Classe servant à créer la clé composite de la table choix
@Embeddable
public class ChoixId implements Serializable {
//Représentation de la clé composite
// Liste des id des chapitres suivants possibles
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(foreignKey=@ForeignKey(name="choix_chapitre_suivant_fk")) //utilisation de la contrainte de la base
private Chapitre suivant;
// Liste des id des chapitres menants au chapitre en court
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(foreignKey=@ForeignKey(name="choix_chapitre_origine_fk")) //utilisation de la contrainte de la base
private Chapitre origine;
/////////////Fin de la clé composite
} |
La classe Choix qui schématise ce qui reste de la table dans la BDD :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
//Classe modélisant la table choix pour une utilisation du ManyToMany retravaillée
@Entity
@Table(name = "choix")
@AssociationOverrides({ //ATTENTION !!! cette ensemble est indispensable pour faire la clé composite (ce qui permet ensuite d'afficher le nomchoix)
@AssociationOverride(name = "id.origine",
joinColumns = @JoinColumn(name = "chap_origine")),
@AssociationOverride(name = "id.suivant",
joinColumns = @JoinColumn(name = "chap_suivant")) })
public class Choix {
//clé composite => qui est représentée dans la classe ChoixId
@EmbeddedId
private ChoixId id = new ChoixId();
//attribut supplémentaire de la table
@Column(name = "choix_nom")
private String nomChoix;
//////////////////////////////////////////////
//les getter/setter |
La classe chapitre
Code:
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
|
@Entity
@Table(name = "chapitre")
public class Chapitre implements Serializable {
@Id
@Column(name = "chap_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "chap_titre")
private String titre;
@Column(name = "chap_type")
private String type;
//liaison avec livre
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "livre_id")
private Livre livre;
//Zone pour relation ManyToMany retravaillé
//(pour récupérer l'attribut choix_nom plus tard dans la table choix)
// Liste des chapitres suivants possibles => on utilise l'id du chapitre en court pour trouver les choix suivants
@OneToMany(mappedBy = "id.origine", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<Choix> suivants = new HashSet<Choix>();
// //Commenté car non utile actuellement
// // Liste des chapitres menants à ce chapitre
// @OneToMany(mappedBy = "id.suivant", cascade = CascadeType.ALL)
// private Set<Choix> origines = new HashSet<Choix>();
/////////////////Fin de la zone retravaillé
//////////////////////////////////////
//les getter/setter |
J'ai un résultat qui est pas mal, dans mon json :
Pièce jointe 593497
Mais j'ai juste un problème => id : {}
Je devrais pouvoir récupérer l'id du chapitre qui est présent dans la table. Mais il semblerait qu'il s'agisse de l'objet entier.
J'arrive pas à mettre la main sur cet id ?
Une petite idée ? ou un suggestion ?
Ca fait 2 semaines que je suis dessus maintenant, j'aimerai bien réussir à trouver une solution ...:(