dans ce lien que j'ai mentionné précédemment dans le commentaire, lisez cette partie:
Une jointure «fetch» permet d'initialiser des associations ou des collections de valeurs avec leurs objets parents en une seule sélection. Ceci est particulièrement utile dans le cas d'une collection. Il remplace efficacement la jointure externe et les déclarations différées du fichier de mappage pour les associations et les collections.
ce "JOIN FETCH" aura son effet si vous avez la propriété (fetch = FetchType.LAZY) pour une collection à l'intérieur d'une entité (exemple ci-dessous).
Et ce n'est que l'effet de la méthode "quand la requête doit se produire". Et vous devez également savoir ceci :
hibernate a deux notions orthogonales: quand l'association est-elle récupérée et comment est-elle récupérée. Il est important de ne pas les confondre. Nous utilisons fetch pour régler les performances. Nous pouvons utiliser lazy pour définir un contrat pour quelles données sont toujours disponibles dans toute instance détachée d'une classe particulière.
quand l'association est-elle récupérée -> votre type "FETCH"
comment est-il récupéré -> Rejoindre / sélectionner / Sous-sélectionner / Lot
Dans votre cas, FETCH n'aura son effet que si vous avez un département comme ensemble dans Employee, quelque chose comme ceci dans l'entité:
@OneToMany(fetch = FetchType.LAZY)
private Set<Department> department;
quand vous utilisez
FROM Employee emp
JOIN FETCH emp.department dep
vous obtiendrez emp
et emp.dep
. quand vous n'avez pas utilisé fetch, vous pouvez toujours obtenir emp.dep
mais hibernate traitera une autre sélection dans la base de données pour obtenir cet ensemble de services.
donc c'est juste une question de réglage des performances, à propos de vous voulez obtenir tous les résultats (vous en avez besoin ou non) en une seule requête (récupération impatiente), ou vous voulez l'interroger plus tard lorsque vous en avez besoin (récupération paresseuse).
Utilisez la récupération rapide lorsque vous avez besoin d'obtenir de petites données avec une sélection (une grande requête). Ou utilisez la récupération paresseuse pour interroger ce dont vous avez besoin plus tard (plusieurs requêtes plus petites).
utilisez fetch quand:
pas de grande collection / ensemble inutile à l' intérieur de cette entité que vous êtes sur le point d'obtenir
la communication entre le serveur d'applications et le serveur de base de données est trop longue et nécessite beaucoup de temps
vous pouvez avoir besoin de cette collection plus tard lorsque vous n'y avez pas accès (en dehors de la méthode / classe transactionnelle )