Il serait utile de savoir exactement quelles requêtes répétées que vous voyez. Comme d'autres l'ont fait remarquer, nous ne faisons que spéculer sans voir vos cartographies. Vous pourriez courir dans la recherche ardente d'Hibernate. C'est là que Hibernate essaie de charger un graphe d'objet entier pour chaque utilisateur (et leurs adresses, téléphones, animaux de compagnie, etc.) correspondant au nom très général contenant la requête 'tom'. Essayez de désactiver par défaut pour le chargement complet des propriétés de l'utilisateur dans vos fichiers de mapping Hibernate ou annotations puis procédez comme suit:
Disons que vous obtenez beaucoup de requêtes répétées à la recherche dans les tables USER_ADDRESS (hibernate property "addresses")
, USER_PHONE (property "phones")
et USER_PET (property "pets")
. Utilisez les appels de critères suivants pour joindre ces attributs dans la requête d'origine et réduire les requêtes répétées. Hibernate sait comment séparer ces colonnes en objets séparés. Vous pouvez également essayer d'ajouter un nombre maximal de résultats renvoyés.
Criteria myUsers = getCurrentSession().createCriteria(User.class);
myUsers = myUsers.add(Restrictions.ilike("name", "tom", MatchMode.ANYWHERE));
myUsers.createCriteria("addresses"); // NEW
myUsers.createCriteria("phones"); // NEW
myUsers.createCriteria("pets"); // NEW
myUsers.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
myUsers.setMaxResults(100); // NEW
result.addAll(myUsers.list());
Vous pouvez en savoir plus dans les sections 15.4-15.6 here
montrer peut-être vos applications? –
stackoverflow dans stackoverflow +1 – Martin
combien est ** beaucoup ** exactement? Dans tous les cas, il vaut mieux utiliser HQL plutôt que les critères API dans ce cas. Si votre clause where est déterminée lors de l'exécution, les critères api sont utiles sinon HQL est préférable. Vous pouvez enregistrer des requêtes HQL dans les fichiers .hbm ou même utiliser des annotations et elles sont compilées (validées efficacement) lors du chargement initial des liaisons. – arajashe