我在我的项目中使用JavaFX,Hibernate和HSQLDB。
在我的DAOIMPL课程中,我使用的是Hibernate标准和一些限制:
Criteria criteria = getSession().createCriteria(getEntityClass(), "remark");
criteria.createAlias("remark.inspectionTrip", "inspection")
.createAlias("inspection.laboratory", "laboratory")
.createAlias("inspection.tripSector", "sector")
.createAlias("sector.stageList", "stage");
if (statisticsFilter.getSector() != null) {
criteria.add(Restrictions.eq("sector.id", statisticsFilter.getSector().getId()));
}
if (statisticsFilter.getStage() != null) {
criteria.add(Restrictions.eq("stage.id", statisticsFilter.getStage().getId()));
}
e.t.c...
一切正常。解析所有结果集,并根据搜索条件将所有实体从数据库加载到我的GUI。
但是现在,我需要按日期过滤。
例如,我需要在某一年或某一年的某个特定月份选择实体。 我试图做某种事情(这是我解决这个任务的第一个也是不正确的变种):
if (statisticsFilter.getDate() != null) {
criteria.add(Restrictions.like("inspection.beginDate", statisticsFilter.getDate() "));
}
要解决这个问题,我不能使用Date对象,因为根据to this nuance它不正确,因为来自JavaFX日期选择器的日期对象将是例如' 2016- 04-23 00:00:00.0000000000'在我的数据库中有日期' 2016-04-23 19:20:23.707000000'并且它不一样。
然后,我已经开始为我的HSQLDB制作Hibernate sqlRestriction,但我找不到正确的方法来执行此操作。 (在简单的MySQL中,e.t.c。集成没有这样的问题,我总是像往常一样使用查询并且它总是工作正常,但在HSQLDB中有一些特定的别名和特定的查询创建规则:
我的最后一个测试变体(也不是正确的,这给了我一个例外)是这样的:
if (statisticsFilter.getDate() != null) {
criteria.add(Restrictions.sqlRestriction("remark.beginDate like '2016%'"));
}
你能否展示一些小而正确的例子来为使用LIKE的日期为HSQLDB创建Hibernate条件sqlRestriction并考虑我使用别名这一事实?
(我在这个问题上搜索了很多不同的选项,但遗憾的是没有找到合适的例子来解决这个问题。)