Hibernate和HSQLDB - 标准日期的sql限制

时间:2016-04-23 10:14:04

标签: java hibernate date hsqldb hibernate-criteria

我在我的项目中使用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并考虑我使用别名这一事实?

(我在这个问题上搜索了很多不同的选项,但遗憾的是没有找到合适的例子来解决这个问题。)

0 个答案:

没有答案