2012-05-06 4 views
0

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

  • Если нет контракта, это означает, что квартира имеет бесконечный контракт.
  • Если старт контракта равен NULL, это означает, что договор длится с наступления дней
  • Если договор заканчивается на NULL, договор действителен навсегда.

В основном я отправляю целое число в свой DAO. Целое число указывает год. DAO должен вернуть все Аппартаменты, которые были/действительно когда-то в течение этого года. Это означает, что он должен вернуть:

  • Все КВАРТИРЫ без контракта
  • Все Appartments с STARTDATE до или равен в этом году, и NULL, как ENDDATE
  • Все Аппартаменты с ENDDATE равными или после этого год и NULL как startDate
  • Все апартаменты с startDate равны или до этого года и заканчиваются равными или после этого года.

До сих пор я не уверен, как обращаться с NULL. А также, как сравнить год с полем даты. Любая помощь будет очень полезна.

Я получил это далеко:

DetachedCriteria criteria = DetachedCriteria.forClass(Appartment.class) 
    .setFetchMode("contract", FetchMode.JOIN) 
    .createAlias("contract", "c") 
    .add(Restrictions.le("c.startDate", ????)) 
    .add(Restrictions.ge("c.endDate", ????)); 
+0

Не обращайте внимания на NULL. Я переработал свой код, чтобы делать значения по умолчанию, а не сделать их допустимыми. Я сравню год, как вопрос о separete и закрываю его – user829237

ответ

0

Что касается нулевой, вам нужно использовать явный NullExpression критерий, так же, как вы бы использовали, если вы написали прямой SQL.

+0

Не могли бы вы предоставить более подробную информацию о том, как именно использовать его? Im googling это прямо сейчас, но не могу найти достойные примеры. – user829237

+0

Что там? [ 'Restrictions.isNull (PROPNAME)'] (http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/api/org/hibernate/criterion/Restrictions.html#isNull (Java. lang.String)) Я не пробовал (я должен был бы создать весь стек), но я был бы удивлен, если бы это не сработало. –

+0

Да, но это действительно не касается моей проблемы. Мне нужно установить значение по умолчанию для нулевых значений. Например. если startdate имеет значение null, то обрабатывайте его как 01-01-1980. Я хотел бы сделать все это в одном заявлении. – user829237