Пользовательский запрос NHibernate

Мне нужно реализовать форму запроса, дающую пользователю возможность создавать свои собственные критерии, основанные на выборе свойства, оператора (=, <>, например, не как, в, не в...) и значения, объединяющего с логическими операторами AND, OR. Я хотел сохранить там критерии в отдельном объекте в моей базе данных.

У кого-нибудь было такое требование раньше? По какому пути мне идти: ICriteria или HQL? Есть ли другой вариант?

Я очень благодарен за любые идеи, предложения, указатели...

THX мил. Дарко

1 ответ

Я реализовал довольно похожее требование. Я использую Criteria API, потому что вам не нужно использовать строковые операции, чтобы соединить ваш запрос, что делает его более стабильным.

В этом вопросе я опубликовал простой пример, как составить динамический запрос.

В нашем решении я не разрешил операции OR, потому что это делает его очень сложным (также часть пользовательского интерфейса), и производительность может ухудшиться. Но позже мы, вероятно, также осуществим это.

Проектные решения должны приниматься в соответствии с вашими требованиями, сложностью ваших запросов и структурой данных.

Например, я сделал класс фильтра для каждого запроса. Класс фильтра содержит предопределенные поля. Это делает его более стабильным, потому что вы всегда знаете, какие поля могут быть там, и можете поместить их в определенные места в запросе. Некоторые поля требуют подзапросов. В нашем случае невозможно сделать его полностью универсальным (это означает, что вся информация о том, как должен формироваться запрос, хранится в фильтре). Для каждого класса фильтров существует особый метод, позволяющий превратить его в запрос. Это дает вам большую гибкость.

Мои критерии состоят из ссылки на поле, оператора (enum) и аргумента.

Другие вопросы по тегам