Bonjour,

Je suis en train de découvrir Hibernate.

Pour celà, j'ai créé un petit cas : j'ai trois tables sous MySQL
- PERSONNE (IDENTPERS, NOMPERS),
- GROUPE (IDENTGROUP, NOMGROUPE),
- COMPOSGR (IDENTGROUP, IDENTPERS, ROLE).

Pb => comment récupérer le rôle sans passer par une requête Query ?

Entites

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
 
@Entity
@Table(name = "PERSONNE")
public class Personne implements Serializable,  Comparable<Personne> {
 
	private static final long serialVersionUID = 3743689093556981957L;
 
	/** l'identifiant */
	@Id
	@Column(name = "IDENTPERS", nullable = false, length = 4)
	protected String ident = "";
 
	/** le nom */
	@Column(name = "NOMPERS", unique=true, nullable = false, length = 30)
	protected String nom = "";
 
	// relation Personne (one) -> Composition (many)
	@OneToMany(mappedBy = "personne", cascade = { CascadeType.REMOVE } )
	protected Set<Composition> listeGroupe = new HashSet<Composition>();
 
	public Personne() {
	}
 
 
	public String getIdent() {
		return ident;
	}
 
 
	public void setIdent(String ident) {
		this.ident = ident;
	}
 
 
	public String getNom() {
		return nom;
	}
 
	public void setNom(String nom) {
		this.nom = nom;
	}
 
 
	public Set<Composition> getlisteGroupe() {
		return listeGroupe;
	}
 
	public void setListeGroupe(Set<Composition> listeGroupe) {
		this.listeGroupe = listeGroupe;
	}
}
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
 
@Entity
@Table(name = "GROUPE")
public class Groupe implements Serializable {
 
	private static final long serialVersionUID = 4960895813795673977L;
 
	/** l'identifiant */
	@Id
	@Column(name = "IDENTGROUP", nullable = false, length = 3)
	protected String ident = "";
 
	/** le titre */
	@Column(name = "NOMGROUPE", unique=true, nullable = false, length = 30)
	protected String titre = "";
 
	/** les personnes */
	// relation Groupe (one) -> Personne (many)
	@OneToMany(mappedBy = "groupe", cascade = { CascadeType.REMOVE } )
	protected List<Composition> listePersonne = new ArrayList<Composition>();
 
 
	public Groupe() {
	}
 
 
	public String getIdent() {
		return ident;
	}
 
	public void setIdent(String ident) {
		this.ident = ident;
	}
 
 
	public String getNom() {
		return nom;
	}
 
	public void setNom(String nom) {
		this.nom = nom;
	}
 
	public List<Composition> getListePersonne() {
		return listePersonne;
	}
 
	public void setListePersonne(List<Composition> listePersonne) {
		this.listePersonne = listePersonne;
	}
 
}
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
 
@Entity
@Table(name = "COMPOSGR")
public class Composition implements Serializable {
 
	private static final long serialVersionUID = 4428535212320342621L;
 
	@Embeddable
	public static class Id implements Serializable {
 
		private static final long serialVersionUID = 8057271362402253716L;
 
		/** la personne */
		@Column(name = "IDENTPERS", nullable = false, length = 4)
		private String identPers = "";
 
		/** le groupe */
		@Column(name = "IDENTGROUPE", nullable = false, length = 3)
		private String identGroupe = "";
 
 
		public Id() {
		}
 
		public String getIdentPers() {
			return identPers;
		}
 
		public void setIdentPers(String identPers) {
			this.identPers = identPers;
		}
 
		public String getIdentGroupe() {
			return identGroupe;
		}
 
		public void setIdentGroupe(String identGroupe) {
			this.identGroupe = identGroupe;
		}
	}
 
	@EmbeddedId
	private Id id = new Id();
 
	@ManyToOne()
	@JoinColumn(name= "IDENTPERS", insertable = false, updatable = false)
	private Personne personne = new Personne();
 
	@ManyToOne()
	@JoinColumn(name= "IDENTGROUPE", insertable = false, updatable = false)
	private Groupe groupe = new Groupe();
 
	@Column(name = "ROLE", nullable = true, length = 30)
	private String role = "";
 
 
	public Composition() {
	}
 
 
	public Composition(Personne personne, Groupe groupe) {
		getId().setIdentPers(personne.getIdent());
		getId().setIdentGroupe(groupe.getIdent());
 
		setPersonne(personne);
		setGroupe(groupe);
		personne.getListeGroupe().add(this);
		groupe.getListePersonne().add(this);
	}
 
 
	public String getIdentPers() {
		return getId().getIdentPers();
	}
 
	public void setIdentPers(String identPers) {
		getId().setIdentPers(identPers);
	}
 
 
	public String getIdentGroupe() {
		return getId().getIdentGroupe();
	}
 
	public void setIdentGroupe(String identGroupe) {
		getId().setIdentGroupe(identGroupe);
	}
 
	public Id getId() {
		return id;
	}
 
	public void setId(Id id) {
		this.id = id;
	}
 
 
	public Personne getPersonne() {
		return personne;
	}
 
	public void setPersonne(Personne personne) {
		this.personne = personne;
	}
 
	public Groupe getSGroupe() {
		return Groupe;
	}
 
	public void setGroupe(Groupe Groupe) {
		this.Groupe = Groupe;
	}
 
	public String getRole() {
		return role;
	}
 
	public void setRole(String role) {
		this.role = role;
	}
}

le DAO
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
 
....
 
	public void getListeGroupe(Personne personne) throws Exception {
 
		EntityManager em = emf.createEntityManager();
		EntityTransaction tx = em.getTransaction();
 
		Personne newPers = em.find(Personne.class, personne.getIdent());
 
		for(Composition compos : newPers.getListeGroupe()) {
			Groupe groupe = compos.getGroupe();
 
			System.out.println("Code : " + groupe.getIdent());
			System.out.println("Nom : " + groupe.getNom());
			System.out.println("Role : " + compos.getRole());
		}
 
		em.close();
	}
Le rôle est systématiquement à blancs

Merci d'avance pour vos réponses.