Bonjour à tous !

Ça fait plusieurs jours que je bloque sur un problème de relation avec Hibernate...

Je voudrais matérialiser la chose suivante :
  • 1 Project peut avoir plusieur Team
  • 1 Team est composée de plusieurs Member et est gérée par un Manager
  • 1 Member appartient à une Team et correspond à un User et peut avoir un accès restreint


J'ai donc 4 tables : (les clés primaires sont en gras)
  • project [int id, varchar nom...]
  • team [int id, int project_id, varchar name]
  • team_user [int user_id, int team_id, bit is_restricted]
  • user [int id, varchar name...]


J'arrive sans problème à créer des équipes avec des membres et les affecter à des projets, mais je n'arrive pas à les lire.
J'ai l'impression que ça fait des SELECT en boucle (certainement la relation bidirectionnelle entre Team et Member).

C'est quoi qui cloche ???

Voici mes classes annotées :
Team:
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
@Entity
@Table(name="team")
public class Team implements Serializable {
 
	private static final long serialVersionUID = -8809564093412284994L;
 
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id = 0;
 
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="project_id")	
	private Project project = null;
 
	@OneToMany(mappedBy="team", cascade={CascadeType.ALL})
	private Set<Member> members = new HashSet<Member>();
 
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="manager_id")	
	private User manager;
 
        //...
}
Member:
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
@Entity
@Table(name="team_user")
public class Member implements Serializable  {
 
	private static final long serialVersionUID = -6866932754421199976L;
 
	@Id
	@ManyToOne
        @JoinColumn(name="team_id")	
	private Team team = null;
 
	@Id
	@ManyToOne
	@JoinColumn(name="user_id")	
	private User user = null;
 
	@Column(name="is_restricted")
	private boolean isRestricted = false;
 
        //...
}
User:
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
@Entity
@Table(name="user")
public class User implements Serializable {
 
	private static final long serialVersionUID = -5946896001563108929L;
 
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private int id;
 
	@Column
	private String firstname;
 
	@Column
	private String lastname;
 
        //...
}