2012-05-06 80 views
0

我在构建一个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", ????)); 
+0

那么不要在意NULL。我重构了我的代码来完成默认值,而不是让它们为空。我将这一年的比较作为一个独立的问题,并关闭这个 – user829237

回答

0

至于空,你需要使用明确的NullExpression标准,就像如果你直接写SQL你会使用。

+0

您能否提供一些关于如何使用它的更详细信息?我现在使用谷歌搜索,但无法找到任何体面的例子.. – 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