gpt4 book ai didi

java - 使用 Hibernate 时集成测试 native SQL 查询

转载 作者:行者123 更新时间:2023-12-01 23:43:12 26 4
gpt4 key购买 nike

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

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

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

my_date > current_date - interval '10 year'

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

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

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

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

最佳答案

通常集成测试的目的是针对与生产(非常)相似的环境进行测试,因此在我看来,您应该使用相同的数据库引擎。然而对于单元测试来说,使用 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

关于java - 使用 Hibernate 时集成测试 native SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17616287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com