Я думаю, что лучший выбор зависит от ваших запросов.
Если возможно, я бы порекомендовал вам перейти на первый вариант.Я часто внедряю методы поиска DAO, которые принимают много обнуляемых параметров.Сам метод DAO строит критерии добавления объекта критериев, если соответствующие параметры метода не установлены в NULL.
Это простой пример:
public List<SomeObject> findSomeObjects(String name, Integer categoryId,
Date dateTimeFrom, Date dateTimeUntil) {
if (name != null)
// add name to criteria
if (categoryId != null)
// add category to criteria
// ...
}
Если действительно много разныхПоисковые операции и количество комбинаций очень велики, вы также можете попробовать второй вариант.Возможно, вы можете ограничить свой критерий «клонирования», упростив и адаптировав его для своих вариантов использования.