不同数据库引擎之间的本机查询日期格式
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.DateTime
和 toString()
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);
这似乎工作正常。
我正在使用以下代码为 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.DateTime
和 toString()
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);
这似乎工作正常。