我正在使用以下代码为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编写单元测试了吗?
答案 0 :(得分:0)
好吧,我很尴尬地承认我花了多长时间才弄清楚这一点。
我只是将LocalDate转换为Java日期,然后使用它来设置TemporalType参数。
Date date = localDate.toDate();
countQuery.setParameter(parmName, date, TemporalType.DATE);
这似乎工作正常。