Hibernate, NamedQuery & Handling NamedParamater в случае, если он имеет значение Null или недоступен - PullRequest
1 голос
/ 05 октября 2010

Я использую один именованный запрос для поиска результатов в моем проекте. например (из StructureEventDAO как таковой, где se.Structure.StructureId =: StructureId и se.eventMaster.eventName =: eventName).

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

Я просто хотел знать, что если во время выполнения у меня один из параметров в качестве Null, и я хочу игнорировать это и получить результат? (это означает, что в моем запросе скажем StructureId = null, поэтому я получу все StructureEventDAO, которые будут передавать eventName)

С уважением, Amit

Ответы [ 2 ]

0 голосов
/ 05 октября 2010

Обычно это то, что вы реализуете, используя динамически генерируемый запрос (т.е. не NamedQuery), и в основном есть две опции:

  1. построить строку HQL динамически (т.е. не поименованным запросом) ~ или ~ *
  2. используйте Criteria API

И, на мой взгляд, Criteria API является более элегантным и менее многословным для динамических запросов, как обсуждалось, например, в Hibernate Querying 102: Criteria API . Вот пример, взятый из статьи:

Criteria criteria = session.createCriteria(Accommodation.class);
if (startDate != null) {
    criteria.add(Expression.ge("availabilityDate", startDate);
}                
if (endDate != null) {
    criteria.add(Expression.le("availabilityDate", endDate);
} 

Что гораздо проще, чем генерирование эквивалентной строки запроса HQL (подробности см. В статье целиком).

И смотри также:

Ресурсы

Смежный вопрос

0 голосов
/ 05 октября 2010
from StructureEventDAO as se where (se.Structure.StructureId = :StructureId or 
se.Structure.StructureId is null) and se.eventMaster.eventName =:eventName

Я не помню точно синтаксис, но я думаю, что вы можете сделать что-то подобное.

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