针对不同数据库使用本机查询的最佳实践

时间:2015-01-13 14:27:46

标签: java spring oracle hibernate

我们有以下设置:

  • Spring with hibernate
  • 用于开发集成测试的HsqlDb和用于生产中的Oracle

现在我们想使用表函数,尤其是Oracle中的变量IN列表:

SELECT * 
FROM table1 
WHERE id IN (SELECT * FROM TABLE ( cast(in_list('abc,xyz,012') as myTabletype)))

所以我们需要使用本机查询。问题是虽然HsqlDb支持表函数,但查询看起来会略有不同。

我知道我们可以在JPA QL中使用query.setParameter(...)列表,但这会导致查询缓存错误。那么有什么最佳实践可以解决这个问题吗?

我想到的解决方案:

  1. 使用临时表。问题:readOnly-transactions
  2. 是不可能的
  3. 模拟entityManager并更改查询字符串。
  4. 动态检查数据库方言并切换查询。
  5. 还有其他解决方案吗?

0 个答案:

没有答案