不同数据库引擎之间的本机查询日期格式

时间:2019-05-20 17:13:21

标签: sql-server hibernate unit-testing hsqldb

我正在使用以下代码为Hibernate创建本机查询

    final Query countQuery = entityManager.createNativeQuery( countSql );

    if ( countCriteria.getStartDate() != null ) {
        final String startDate = countCriteria.getStartDate().toString();
        countQuery.setParameter( START_DATE_PARAMETER, startDate );
    }

我班上的startDate是org.joda.time.DateTime,而toString()返回“ 2019-05-13”。

这些查询参数在针对MS Sql Server运行的生产环境中运行良好。 (ick!)

现在,单元测试正在针对HSQLDB运行。我提供相同的值,它会抛出:

javax.persistence.PersistenceException: org.hibernate.exception.DataException: data exception: invalid datetime format

当它尝试运行查询时。

由于参数的格式完全相同,因此我假设问题是HSQLDB的日期字符串的格式。

那么,现在呢?我该如何前进?我已经检查了使用TEMPORAL或其他参数的setParameter格式,但是在JODA时间内不起作用。

我已经与我的技术负责人谈论过,不使用本机查询,而是使用休眠查询,但是它充耳不闻。我是否还有另一种选择,这样我就不必与技术领先者抗争为我们的DAO编写单元测试了吗?

1 个答案:

答案 0 :(得分:0)

好吧,我很尴尬地承认我花了多长时间才弄清楚这一点。

我只是将LocalDate转换为Java日期,然后使用它来设置TemporalType参数。

    Date date = localDate.toDate();
    countQuery.setParameter(parmName, date, TemporalType.DATE);

这似乎工作正常。