@OneToMany "Select" en boucle :|
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 ??? :cry:
Voici mes classes annotées :
Team:
Code:
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:
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:
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;
//...
} |