bonjour
j'ai les tables
-USER
-TEAM
-USER_TEAM
-OFFICE
Donc une relation nn entre user et team et une relation 1 n entre team et office, ou autre formulation :.
Un user appartient a plusieurs teams , une tean appartient a un office.

La relation nn en jpa marche très bien et est performante en combinant un LAZY et en écrivant une jointure explicite entre USER et TEAM comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
public class User................
@ManyToMany (fetch=FetchType.LAZY)
    @JoinTable(name="t_car_users_teams", 
          joinColumns = @JoinColumn( name = "id_user", referencedColumnName = "id_user"), inverseJoinColumns = @JoinColumn(name = "id_team", referencedColumnName = "id_team"))
	private List<Team> teams;
et pour la requete qui recupere la liste des users avec leurs teams:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
select u from User u left join fetch u.teams
Les temps de reponses sont tres bon, mais des que j'ajoute dans l'objet team le lien avec office , je constante que pour chaque team du user, jpa execute une requete pour aller chercher l'office de la team . Les perfs deviennent tres mauvaises.
J'ai donc fait du lazy entre team et office et les perfs sont correctes mais mon objet office dans l'objet team vaut null.
Et j'ai pas envi que les developpeurs qui utilisent l'api puissent faire par ex user.team[0].office.name et se retrouvent avec un nullPointerException.

Donc il faut soit optimiser mais comment ?
soit "cacher" l'accès a office dans l'objet team mais la relation entre team et office est une relation nécessaire dans d'autres contextes
Peut être faut il faire un objet SimpleTeam sans office ?
Bref comment faire ?

Merci