Unit testing 如何使SpringJDBC查询独立于数据库?

Unit testing 如何使SpringJDBC查询独立于数据库?,unit-testing,hsqldb,junit4,spring-jdbc,database-independent,Unit Testing,Hsqldb,Junit4,Spring Jdbc,Database Independent,我使用的是SpringJDBC3.0.5版本,我们根据客户的要求使用DB2数据库。我们希望对HSQL DB bcz运行测试,我们不希望在测试中干扰DB2主键(通过创建序列实现) 我在ApplicationContext.xml中使用了与测试相关的“jdbc:embedded database”标记来创建所需的表,并为测试插入了虚拟数据(已成功运行) 但是现在很明显,我们在DAO层中用DB2方言编写的查询的语法存在问题 克服这个问题的最佳解决方案是什么 有没有像API这样的“Hibernate标准

我使用的是SpringJDBC3.0.5版本,我们根据客户的要求使用DB2数据库。我们希望对HSQL DB bcz运行测试,我们不希望在测试中干扰DB2主键(通过创建序列实现)

我在ApplicationContext.xml中使用了与测试相关的“jdbc:embedded database”标记来创建所需的表,并为测试插入了虚拟数据(已成功运行)

但是现在很明显,我们在DAO层中用DB2方言编写的查询的语法存在问题

克服这个问题的最佳解决方案是什么

有没有像API这样的“Hibernate标准”支持SpringJDBC,使我们的查询与连接相关(在运行HSQL时更痛苦)可以在任何数据库上运行


提前感谢

JPA是一个很好的解决方案,因为它为您提供了一个标准的数据库操作界面,允许您相当自由地交换引擎实现(Hibernate、Toplink等)

如果您需要,那么您可以始终混合和匹配JPA和JDBC,以适应JPA没有给您足够的灵活性的情况

您应该发现,在设置持久性上下文时,指定底层数据库的方言归结为一种配置选择。这应该可以消除JPQL中各种数据库之间的一些差异


一如既往,避免使用特定于供应商的扩展以实现最大的可移植性。

请不要说“切换到Hibernate”,这是我熟悉的解决方案!。。。。它不一定是冬眠。任何JPA实现都可以。但是,如果您编写了文字JDBC查询,那么它们当然不是独立于数据库的。您必须为另一个数据库重写它们。或者编写第二组查询,并添加一个层,该层根据基础数据库选择正确的查询集。但是,由于您必须以任何方式重写它们,您可能需要用类似EJBQL的方式重写它们,然后切换到使用JPA而不是JDBC。到目前为止,我们将查询更改为不使用任何特定于DB2的函数,但切换到基于JPA的实现将是更好的选择