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", ????));
Не обращайте внимания на NULL. Я переработал свой код, чтобы делать значения по умолчанию, а не сделать их допустимыми. Я сравню год, как вопрос о separete и закрываю его – user829237