Bonjour,

Je travaille sur entité "FilmImpl" qui a une collection (ManyToMany) full loadée :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
          name = "FILM_KIND",
          joinColumns = @JoinColumn(name = "FILM_ID", referencedColumnName = "ID"),
          inverseJoinColumns = @JoinColumn(name = "KIND_ID", referencedColumnName = "ID")
)
public List<KindImpl> getKinds() {
    return kinds;
}
La collection est bien full loadée, mais le problème est qu'il y a plusieurs requêtes de générées :

  1. Une première requête pour récupérer la liste de films
  2. Et ensuite 1 requête par film pour charger la collection "kinds"


Hors, il serait à mon avis, plus performant d'utiliser un JOIN dans la première requête. Je sais que Hibernate (sans JPA) gérait ça très bien, mais avec JPA, je n'arrive pas à forcer le join.

J'ai regardé dans la doc d'Hibernate et pourtant ils disent que le fetch mode par défaut sur les ManyToMany full loadée est JOIN, je ne vois donc pas vraiment d'ou ça vient.

Est-ce quelqu'un saurait comment forcer hibernate à utiliser un Join sur une telle requête ? Ou alors, est-ce que ça vient de JPA ?

Merci