Например, если я делаю что-то как:
Criteria c = session.createCriteria(Book.class)
.add(Expression.ge("release",reDate);
.add(Expression.ge("price",price);
.addOrder( Order.asc("date") )
.setFirstResult(0)
.setMaxResults(10);
c.list();
Как я могу использовать тот же экземпляр критериев, но удалить (например), второй критерий? Я пытаюсь создать динамический запрос, в котором я хотел бы позволить пользователю удалить фильтр без бэкенда, имеющего необходимость восстановить критерии с нуля.
Спасибо
Насколько мне известно, невозможно удалить элементы (ограничения, упорядочение и т. Д.) Из запроса критериев после его создания. Я недостаточно осведомлен о внутреннем устройстве Criteria API, но я знаю, что в открытом интерфейсе ничего нет. Вы можете попробовать манипулировать объектами, которые вы передаете в add
или addOrder
, но это звучит как больше работы, чем она того стоит, особенно когда есть более чистые альтернативы.
Критериальные запросы, безусловно, использовались однозначно в каждом приложении, которое я видел.
Теперь вы можете сохранить свои ограничения, упорядочение и лимиты в настраиваемом формате (например, Коллекция
), а затем довольно легко построить свой запрос из этого сохраненного формата. Это, вероятно, будет иметь больше смысла для вашего пользовательского интерфейса, поскольку вам определенно понадобится детальный контроль оттуда.
Я уверен, что это не тот ответ, который вы ищете, но это именно то, что я делал в прошлом.
HTH
Как я могу использовать тот же экземпляр критерия, но удалить (например) второй критерий? Я пытаюсь создать динамический запрос, в котором я хотел бы позволить пользователю удалить фильтр, без необходимости восстановления критериев с нуля серверной части.
Вы не можете, вам придется повторно отправить весь (обновленный) набор параметров, используемых для построения динамического запроса.