繁体   English   中英

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

[英]Hibernate HQL select the next business day after a given year, month and day

大家下午好,

我对Hibernate和HQL有疑问。

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

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。

DayType是这样的:

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

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

非常感谢你!

首先找到不是工作日的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的第一个元素将是日期

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM