Hibernate HQL选择指定年份,月份和日期后的下一个工作日

时间:2016-10-24 20:57:35

标签: java sql hibernate hql

大家下午好,

我对Hibernate和HQL有疑问。

我有一个 CALENDAR 表,其中包含以下字段:

ID, YEAR, MONTH, DAY, DAY_TYPE

我还有一个 DAYTYPE 表,其中包含以下字段:

ID, DAYTYPE_DESC, BC_HOLIDAY, AB_HOLIDAY, ON_HOLIDAY...

DAYTYPE表看起来像这样,表示每个国家的假期。 1是假期,0是工作日。

ID | DAYTYPE_DESC   | US_HOLIDAY | CA_HOLIDAY | 

1  | Business Day   |          0 |          0 |

2  | Weekend        |          1 |          1 | 

3  | Business Day   |          0 |          0 |

4  |Presidents' Day |          1 |          0 |

5  |Canada's Day    |          0 |          1 |

输入为年,月,日,日类型。

DayType是这样的:

class DayType{
  private Long id;
    private String description;
    private Boolean isUSHoliday ;
    private Boolean isCAHoliday;
}

如何编写HQL查询以通过给定输入选择下一个工作日?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

首先找到非工作日的DayType ID列表

Query notInDayTypeQuery = session.createQuery("FROM DayType WHERE isCAHoliday = 1 OR description = 'Weekend'");
notInDayTypeList = notInDayTypeQuery.list();

然后找到不在该列表中的下一个日期

Query query = session.createQuery("FROM Calendar WHERE DayType NOT IN (:notInDayTypeList) AND ((year=:year AND month=:month AND day>=:day) OR  (year=:year AND month>:month) OR year>:year) ORDER BY year, month, day");
        query.setInteger("year", year);
        query.setInteger("month", month);
        query.setInteger("day", day);
        query.setParameterList("notInDayTypeList", notInDayTypeList);
        resultList = query.list();

resultList的第一个元素是日期