我在Hsqldb中进行集成测试。我的生产数据库是Oracle数据库。
Hibernate : 4.1.3.final.
Hsqldb : 2.3.3. ( I can't use the 2.3.4 because it can't run all my junit tests in one click.)
当我必须测试包含WHERE
条件询问日期的查询的方法时,我遇到了两个不同的例外:
org.hsqldb.HsqlException: incompatible data types in combination
或
org.hsqldb.HsqlException: data exception: invalid datetime format
导致异常的代码
下面的代码导致了第一个异常(组合中不兼容的数据类型)
select = "from Player player where player.creationDate = to_char(sysdate,'dd/MM/yy')"
以下代码导致第二个异常(无效的日期时间格式)
select = "from Player player where player.creationDate > '01/01/2016'"
1)显然,问题源于日期格式。 Hsqldb支持'yyyy-MM-dd'
日期格式,因此当我将to_char(sysdate,'dd/MM/yy')
和01/01/2016
更改为1995-01-01
时,它运行正常。
但是,我无法更改这些方法的日期格式。
2)在第二个想法,我考虑更改hsqldb源代码,但它似乎有点激进。
有没有比后者更多的选择?
感谢您的时间。
答案 0 :(得分:1)
请勿尝试格式化日期。请使用带有命名参数的查询。 然后,您可以将setter用于所有数据类型。见下面的例子:
String hql = "from Player player where player.creationDate = :date";
List result = session.createQuery(hql)
.setDate("date", new Date()).list();