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:
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
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; //... }
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
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; //... }
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; //... }
Partager