我对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查询以通过给定输入选择下一个工作日?
非常感谢你!答案 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的第一个元素是日期