Я считаю, что для вашей ситуации достаточно API Criteria.Ваш поиск по Criteria API может работать хорошо, если повторяемые кэшируются и выполняются ли они над индексированными данными.
Этого может быть достаточно, если у вас есть запросы типа:
Дайте мне всех пользователей отдела "FooBar".
или
Дайте мне всем пользователям отдела "FooBar" с заданием "FooBarIst"
Однако, если вы работаете над большими наборами неиндексированных данныхВы можете заметить падение производительности .Например, если ваш атрибут "name" не кэширован, вы заметите, что запрос типа:
Дайте мне всех пользователей с именем LIKE "Harr *", которые должны дать вам пользователей.с именем
Harrold
Harrison
Harring
Harrelson
будет работать очень плохо.
Моя точка зрения заключается в том, что этот запрос будет медленным, если вы не проиндексировали атрибут "name" в своей базе данных.Так что, если вы планируете использовать такие запросы, уже неплохо бы подумать о решении для полнотекстового поиска , которым являются Hibernate Search / Lucene / Solr.
Они дадуту вас гораздо лучшая производительность при поиске электронной почты или других атрибутов, например, и вы пытаетесь выполнить функцию автозаполнения, например.
Итак, я рекомендую вам следующее: В зависимости от сценариеввыберите, следует ли использовать только Criteria API или Criteria API + Hibernate Search / Lucene.Использование только Criteria API хорошо, если вы знаете, каковы его ограничения.
Здесь типичный запрос для первого сценария (где Criteria API достаточно, а Hibernate Search + Lucene - это немного излишне):
Все пользователи в FooBarDepartment
Вот типичный запрос для второго сценария (где Criteria API может сделать это, но Hibernate Search + Lucene будет лучшим выбором):
Все пользователи, у которых электронная почта начинается с буквы "f" Как насчет всех пользователей, у которых электронная почта начинается с буквы "fOo"?
Вышеупомянутый запрос может быть выполнен, конечно, с простым API Criteria, но если у вас есть миллионы пользователей, при выполнении таких запросов вы начнете замечать значительное повышение производительности в подходе Hibernate Search / Lucene по сравнению с подходом простого Criteria.
Итак, в заключение, используете ли вы простые критерии или критерии + поиск в Hibernte + Lucene, зависит от вас и зависит отТребования, дизайн и данные.