2010-06-16 4 views
0

Nous avons une classe JPA @Entity (disons User) qui a une référence @ManyToOne (par exemple Address) chargée à l'aide de l'option EAGER qui charge à son tour ses propres champs @ManyToOne (par exemple Country) dans un style EAGER.Comment imposer un chargement paresseux d'entités sous certaines conditions

Nous utilisons l'interface EntityQuery pour compter la liste des utilisateurs en fonction d'un critère de recherche, pendant une telle charge tous les champs @ManyToOne qui ont été marqués comme EAGER sont chargés. Mais pour effectuer un EntityQuery.resultCount(), je n'ai pas besoin de charger les champs @ManyToOne. Existe-t-il un moyen d'empêcher le chargement des champs EAGER dans de tels cas afin d'éviter les jointures inutiles?

Répondre

2

Pourquoi n'utilisez-vous pas aggregate functions (COUNT dans votre cas) si tout ce dont vous avez besoin est le nombre d'enregistrements?

3

Si vous souhaitez obtenir le nombre de lignes seulement, utilisez la fonction d'agrégat COUNT plutôt que getResultCount().

Sinon, vous pouvez basculer le comportement par défaut sur paresseux et charger les éléments en appelant Hibernate.initialize(entity). Mais c'est ennuyeux.

+1

En essayant d'initialiser des entités est assez sujet aux erreurs, je ne voudrais pas s'aventurer dans ce chemin. Je préférerais aussi que le code soit agnostique de mise en œuvre possible. – Sam

+0

bien, COUNT est plutôt standard. – Bozho

Questions connexes