Это тот же самый вопрос:Как динамически генерировать SQL-запрос на основе пользовательских настроек?
How to dynamically generate SQL query based on user's selections?
Единственное отличие состоит в том, что я заинтересован в том, чтобы решения также с помощью Java/JPA (+ возможно EclipseLink или Hibernate определенных расширений).
Мне нужно создать графический интерфейс, с помощью которого пользователи могут выбрать несколько атрибутов, которые будут использоваться для запроса базы данных для поиска подходящих лиц. Я ищу идеи, как динамически генерировать запрос базы данных по выбору пользователя.
Запрос содержит несколько полей, но, чтобы получить идею я буду включать в себя только три из них ниже в качестве примера:
Занятие - может быть от 0 до п оккупационных строк. Если указаны строки занятости, один из них должен соответствовать.
Возраст - возраст может быть дано как:
- точное совпадение (30)
- диапазона (например, 30-40)
- меньше значения (-40)
- больше, чем значение (30-)
Возрастный параметр необязателен в запросе. Кроме того, пользователь может указать, является ли возраст требуемым параметром. Если это не требуется, и у человека нет возраста, это его профиль, возрастные критерии игнорируются для этого человека.
- Высота - подобно тому, как возраст
Пример запросов:
Каких-либо критериев было дано:
select * from persons
только занятие было дано:
select * from persons where occupation = 'dentist'
Несколько занятий было дано:
select * from persons where (occupation = 'dentist' or occupation = 'engineer')
Возраст было дано как большее, чем значение, и это необходимо, чтобы существовать на профиль человека:
select * from persons where age >= 30
Высота была дана как и не требуется, чтобы существовали на лице человека:
select * from persons where (height is null or (height >= 30 and height <= 40))
Объединение Тион различных критериев:
select * from persons where occupation = 'dentist' and age >= 30 and (height is null or (height >= 30 and height <= 40))
Я уже реализован код, который способен генерировать запросы в виде строк, но это, конечно, не слишком красиво. Я ищу идеи, которые были бы самым эффективным и красивым способом достижения этого.