有効な契約日を持つすべてのアパートをフェッチするHibernate基準を構築しています。アパルトマンと契約の間には1対1の関係があります。それらは埋め込まれていません。契約は必須ではないため、アパートには契約がない場合があります。契約には開始日と終了日がありますが、これらは必須ではないため、一方または両方がNULLになる可能性があります。
- 契約がない場合、それはアパートが終わりのない契約を結んでいることを意味します。
- 契約開始がNULLの場合、それは契約が日の夜明けから続いたことを意味します
- 契約終了がNULLの場合、契約は永久に有効です。
基本的に、DAOに整数を送信しています。整数は年を示します。DAOは、その年のある時点で有効であった/有効なすべてのアパートを返却する必要があります。つまり、次のように戻る必要があります。
- 契約のないすべてのアパート
- startDateが今年以前で、endDateがNULLのすべてのアパートメント
- endDateが今年以降で、startDateがNULLのすべてのアパート
- startDateが今年以前で、enddateが今年以降のすべてのアパート。
これまでのところ、NULLを処理する方法がわかりません。また、年を日付フィールドと比較する方法もあります。どんな助けでも大いに感謝されるでしょう。
私はこれまでに得ました:
DetachedCriteria criteria = DetachedCriteria.forClass(Appartment.class)
.setFetchMode("contract", FetchMode.JOIN)
.createAlias("contract", "c")
.add(Restrictions.le("c.startDate", ????))
.add(Restrictions.ge("c.endDate", ????));