Hibernate: Как я могу создать сохраненные фильтры и затем использовать их? - PullRequest
3 голосов
/ 17 января 2010

Это проблема:

Я получаю задание для проекта, который использует Spring, Hibernate и Wicket.

На определенной HTML-странице у меня должна быть возможность создать фильтр (установите имя фильтра и его параметры). Я должен создать список фильтров таким образом. В то же самое время, я должен иметь возможность отредактируйте и удалите фильтр, а также Конечно, чтобы использовать этот фильтр.

Есть идеи? Как я мог это сделать?

Мой опыт работы с Hibernate очень низок, но мне нужно прийти с идеей для проекта.

Мое наивное решение:

У меня есть класс Table_Something, с которым я связал таблицу в моей базе данных с Hibernate, и мне нужно создать возможность для пользователя создавать фильтры для этой таблицы в моем веб-приложении

Итак, я бы создал класс с именем Table_Something_Filters, с которым я также свяжу таблицу в моей базе данных с Hibernate. Поэтому, когда я создаю новый фильтр для Table_Something в своем приложении, я вставляю новую строку в мои Table_Something_Filters.

Это хорошая идея? Какие-нибудь улучшения для моего решения?

Еще одна проблема: как я могу использовать мой фильтр? Я запрашиваю Table_Something_Filters, чтобы получить значения параметров фильтра, а затем что? Как я могу сгенерировать искатель или как я могу запросить Table_Something, основываясь на значениях из Table_Something_Filters?

Любые идеи или предложения приветствуются! :)

1 Ответ

0 голосов
/ 17 января 2010

Ну, да, вы можете сохранить в своей таблице * _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 больше подходят для такого рода вещей (хотя не всегда легче читать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...