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

Native Query date formats between different database engines

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

    final Query countQuery = entityManager.createNativeQuery( countSql );

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

我的 class 上的开始日期是 org.joda.time.DateTimetoString() returns“2019-05-13”。

这些查询参数在生产中运行良好,运行针对 MS Sql 服务器。 (恶心!)

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

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

当它尝试 运行 查询时。

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

那么,现在呢?我该如何推进呢?我已经检查了采用 TEMPORAL 或其他格式的 setParameter 格式,但这不适用于 JODA 时间。

我已经和我的技术主管谈过关于不使用本机查询,而是使用休眠查询的问题,但它被置若罔闻。我是否有其他选择,这样我就不必与我的技术主管争吵来为我们的 DAO 编写单元测试?

好吧,我不好意思承认我花了多长时间才弄明白这一点。

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

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

这似乎工作正常。