Hibernate Émission d'instruction select, même si FetchMode = Join
J'ai un compteutilisateur entités mappées avec un pays de l'entité . Le pays de la cartographie dans Compteutilisateur classe, c'est comme cela
@ManyToOne(fetch=FetchType.EAGER)
@Fetch(FetchMode.JOIN)
@JoinColumn(name="f_country_id", nullable=true, insertable=false, updatable=false)
private Country country;
Même il n'est fetchmode défini comme le Rejoindre, hibernate feux séparé SQL Select pour récupérer pays.
- Avez-vous résoudre ce problème? Comment les acceptée réponse vous a aidé? Je suis confrontée au même problème, mais le a accepté de répondre à n'aide pas.
- Pour impatient de son simple. Paresseux va arrêter le chargement d'elle. Si la réponse est parfait ici. Petit hic, c'est que lorsque vous avez N à Une relation, il ne fonctionne pas. Nous avons donc besoin d'aller avec une instrumentation du bytecode et de propriétés de champ de modificateur. Ses une fonction de veille prolongée si.
- Le problème, comme le titre et le contenu, est Hibernate émission
SELECT
consolidés pour un@ManyToOne
relation avecEAGER
type d'extraction lors de la demande de mode de lecture estJOIN
. La accepté de répondre les états à éliminer lesfetch=FetchType.EAGER
de l'annotation, une action qui ne va pas changer quoi que ce soit depuisEAGER
est la valeur par défaut type d'extraction pour l'annotation; même si vous interpréter la réponse comme "changementEAGER
avecLAZY
", cela n'explique pas pourquoi Hibernate questionsSELECT
consolidés lorsqu'il est demandé de ne pas le faire.
Vous devez vous connecter pour publier un commentaire.
Supprimer la
fetch=FetchType.EAGER
. Désireux de récupérer déclenche en cascade des instructions select.FetchType.EAGER
est la valeur par défaut pour l'annotation, ainsi retirer cela ne va pas changer quoi que ce soit.Satadru Biswas a donné la réponse dans un commentaire précédent .
Hibernate 3.x ignore la FetchMode annotation lorsque vous utilisez l'interface de Requête (de la Session.createQuery) dans ce cas, vous devez ajouter une JOINTURE interne (INNER join FETCH clause de la part de votre requête.
Les critères de l'interface toutefois utiliser cette interface correctement.
J'essaie d'utiliser @Fetch(FetchMode.JOIN) hibernate adnotation dans toutes les api (JPQL et CriteriaBuilder) mais ne fonctionne pas.
Seulement ce code dans la classe du service des travaux amende:
Je suis en utilisant les critères de requête pour récupérer les Clients.
Tout en obtenant PurchaseOrder il le fait d'une JOINTURE EXTERNE GAUCHE comme ci-dessous
J'utilise le "Progrès" conducteur de se connecter à la DB. Je ne sais pas pourquoi il incendies m+1 requêtes que dans le scénario 2.
FetchMode.JOIN
fonctionne depuis il en trouve une, il commence avecSELECT
s. Avez-vous trouvé une solution?