Ну, да, вы можете сохранить в своей таблице * _FILTER параметры и значения, введенные пользователем в качестве фильтра, а затем в вашем DAO есть такой метод:
public List<MyEntity> findByFilter(MyEntityFilter filter) {
//Use hibernate criteria api to build up your query depending on value in your filter
Criteria criteria = session.createCriteria(MyEntity.class)
if (filter.getName() != null) {
criteria.add( Restrictions.like("name", filter.getName())
}
... Go on testing and adding other parts of the query
return criteria.list();
Класс MyEntityFilter будетпростой класс с геттерами и сеттерами для каждого параметра вашего возможного поискового фильтра.Этот класс Filter вы бы построили со значениями, которые вы сохранили в своей базе данных.Если фильтры не часто меняются, вы можете кэшировать их в своем приложении.Если у вас есть только несколько фильтруемых параметров, вы можете сохранить их в отдельных столбцах, в противном случае вы бы предпочли сохранить строку, подобную этой: name = John ; цвет = синий, красный, желтый; параметр3 = значение *, а затемпроанализируйте строку, чтобы заполнить ваши объекты фильтра.Будьте осторожны с вашими символами-разделителями, которые вы используете, вы должны избегать их из пользовательского ввода!
Затем вы можете динамически создавать критерии поиска только с заполненными полями вашего класса Filter.
Если вы используете Spring с Hibernate, взгляните на их HibernateDaoSupport , и вы также можете найти шаблон спецификации, который часто используется для построения этого сложного запроса.
Конечно, вы не наденетеВам не нужно использовать критерии api, вы также можете создать строку запроса HQL, но критерии api больше подходят для такого рода вещей (хотя не всегда легче читать).