0

我使用 Hibernate 和广泛采用的 Hibernate 查询语言在我的 DAO 中定义查询。

无论如何,与原生 SQL 查询相比,有时 HQL 无法执行特定任务。

例如,以下 Postgres 表达式不能“转换”为 HQL:

my_date > current_date - interval '10 year'

这意味着在某些情况下我正在编写本机查询。考虑到我正在使用另一个数据库进行集成测试(http://hsqldb.org/),它不反映上面 Postgres 表达式的语法。这会导致在使用此类本机查询的 DAO 方法期间出现测试异常。

您如何处理此类案件?我只能想到以下场景:

  • 永远不要使用本机查询并尝试在 HQL 中构建所有内容(可能吗?)
  • 不要测试使用此类查询的方法(不高兴)
  • 生产和开发使用相同的数据库(性能问题)

其他更有趣的解决方案?谢谢

4

1 回答 1

4

通常集成测试的目的是针对(非常)与生产环境相似的环境进行测试,因此 IMO 您应该使用相同的数据库引擎。但是对于单元测试,使用 HSQLDB 很好。在这种情况下,不幸的是,无法对 Postgres 依赖的类进行单元测试,您必须等到集成测试才能检测到错误。

附带说明一下,您提到的 Postgres SQL 的结果可以通过在 Java 上执行日期算术来实现。

Calendar currentDateCal = Calendar.getInstance();
currentDateCal.add(Calendar.YEAR, -10);
Date currentDate = currentDateCal.getTime(); // bind this currentDate object into your HQL parameter
于 2013-07-12T16:02:27.687 回答