Это поможет точно узнать, какие повторяющиеся запросы вы видите. Как отмечали другие, мы просто размышляем, не видя ваших отображений. Вы можете столкнуться с нетерпеливым поиском Hibernate. Именно здесь Hibernate пытается загрузить целый граф объектов для каждого пользователя (и его адресов, телефонов, домашних животных и т. Д.), Соответствующих общему имени, содержит запрос 'tom'. Попробуйте отключить активную выборку по умолчанию для свойств пользователя в файлах сопоставлений или аннотаций Hibernate, а затем выполните следующие действия:
Допустим, вы получаете много повторных запросов, просматривая таблицы USER_ADDRESS (hibernate property "addresses")
, USER_PHONE (property "phones")
и USER_PET (property "pets")
. Используйте следующие критерии вызовов, чтобы объединить эти атрибуты в исходном запросе и уменьшить количество повторных запросов. Hibernate знает, как разбить эти столбцы на отдельные объекты. Вы также можете попробовать добавить максимальное количество возвращаемых результатов.
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());
Вы можете узнать больше в разделах 15.4-15.6 здесь