Использование динамического предложения где hibernate - PullRequest
0 голосов
/ 12 декабря 2011

Я пытаюсь создать запрос, в котором некоторые поля отправляются со стороны клиента на основе выбора пользователя.Я планирую создать динамический запрос, основанный на выборе пользователем. Хотя я могу сделать это просто с помощью некоторого кода Java, и я позволю hibernate запустить этот запрос для меня и вернуть результат.

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

(cond1:a,cond2:b,cond3:c)

Единственная разница - это число значений, которое может содержать карта, и на основании этого я хочу создать запрос типа

select * from demo where cond1='a' and cond2='b' and cond3='c'; and may be 
select * from demo where cond1='a' and cond2='b'; when map has only 2 values

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 12 декабря 2011

Это не должно быть проблемой при использовании критериев .

CriteriaBuilder queryBuilder = em.getCriteriaBuilder();
CriteriaQuery query = queryBuilder.createQuery();
Root<Demo> demo = query.from(Demo.class);

Iterator it = map.entrySet().iterator();
Map.Entry wherePair = (Map.Entry)it.next();  // This is retrieved for creating the where clause
query.where(wherePair.getKey() + "=" + wherePair.getValue());

while (it.hasNext()) {
   Map.Entry pairs = (Map.Entry)it.next();
   query.and(" " + pairs.getKey() + "=" + pairs.getValue());
}

Я не могу гарантировать, что это скомпилируется, но это была бы идея.

2 голосов
/ 12 декабря 2011

Вы можете использовать Критерии запросов , они специально предназначены для этого сценария. Создав запрос критерия, вы можете выполнить итерацию по своей карте и добавить соответствующие ограничения к запросу.

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