我在构建一个Hibernate标准,它将获取所有具有有效合同日期的Appartments。 公寓房和合同之间有一对一的关系。他们没有嵌入。 合同不是强制性的,所以公寓可能没有合同。 契约具有开始和结束日期,但它们不是强制性的,因此其中一个或两个都可能为NULL。Hibernate标准和NULL
- 如果没有合同,这意味着公寓有一个永无止境的合同。
- 如果合同开始时间为NULL,则表示合同从天数黎明延续
- 如果合同结束时间为NULL,则合同永久有效。
基本上我发送一个整数到我的DAO。整数表示年份。 DAO应该返回在该年的某个时间有效的所有Appartments。 这意味着它应该返回:
- 所有Appartments酒店没有合同
- 所有个公寓带的startDate之前或等于今年和NULL作为结束日期
- 与结束日期等于或之后这一切Appartments酒店year,NULL作为开始日期
- 所有公寓的startDate等于或在今年之前,并且enddate等于或在今年之后。
到目前为止,我不确定如何处理NULL。还有如何将年份与日期字段进行比较。任何帮助将大大appriciated。
我有这个迄今为止得到:
DetachedCriteria criteria = DetachedCriteria.forClass(Appartment.class)
.setFetchMode("contract", FetchMode.JOIN)
.createAlias("contract", "c")
.add(Restrictions.le("c.startDate", ????))
.add(Restrictions.ge("c.endDate", ????));
那么不要在意NULL。我重构了我的代码来完成默认值,而不是让它们为空。我将这一年的比较作为一个独立的问题,并关闭这个 – user829237