相关疑难解决方法(0)

HSQLDB ROWNUM与Oracle的兼容性

HSQLDB的changelog,各国ROWNUM()在加入v2.2.0其竞选对手在内存中的HSQLDB集成测试时,我使用没有任何问题.

但是我想对真正的Oracle 10g数据库运行相同的测试,但查询失败,因为调用了伪列ROWNUM.是否有一种简单的方法可以编写在两种环境中都有效的单个查询字符串?

oracle hsqldb rownum

9
推荐指数
1
解决办法
6964
查看次数

单元测试引发:HsqlException用户缺少未找到的权限或对象:ROWNUM

我在执行单元测试时遇到了Hibernate的问题,这是我得到的问题:

org.springframework.dao.InvalidDataAccessResourceUsageException: 
user lacks privilege or object not found: ROWNUM; SQL [n/a];

nested exception is org.hibernate.exception.SQLGrammarException: 
user lacks privilege or object not found: ROWNUM

....

Caused by: org.hsqldb.HsqlException: 
user lacks privilege or object not found: ROWNUM
Run Code Online (Sandbox Code Playgroud)

我正在使用 :

<hibernate.version>4.1.0.Final</hibernate.version>

<hsqldb.version>2.3.3</hsqldb.version>

我正在测试的功能在生产环境中完美地工作,但我不知道为什么在我测试它时并非如此.

以下是引发错误的测试函数:

@Override
public EvaluationCriteria findByCriteriaIdAndEvaluationId(Long evaluationId, Long criteriaId) {

    JPAQuery query = new JPAQuery(getEntityManager());

    QEvaluationCriteria evaluationCriteria = QEvaluationCriteria.evaluationCriteria;

    return query.from(evaluationCriteria)
                .where(evaluationCriteria.evaluation.id.eq(evaluationId))
                .where(evaluationCriteria.criteria.id.eq(criteriaId))
                .singleResult(evaluationCriteria);
}
Run Code Online (Sandbox Code Playgroud)

我的测试:

@Test
public void findByCriteriaIdAndEvaluationId() {

    Long evaluationId = (long)1;
    Long criteriaId   = (long)1;

    EvaluationCriteria …
Run Code Online (Sandbox Code Playgroud)

java junit spring hibernate hsqldb

7
推荐指数
1
解决办法
2万
查看次数

JUnit/HSQLDB:使用HSQLDB进行测试时如何解决Oracle语法错误(没有特权和/或没有DUAL对象)

我有DAO代码,其中包含一些具有Oracle特定语法的JDBC,例如:

select count(*) cnt from DUAL 
where exists (select null from " + TABLE_NAME + "
              where LOCATION = '" + location + "')")
Run Code Online (Sandbox Code Playgroud)

我正在使用内存中的HSQLDB数据库对此DAO方法运行JUnit测试.显然,DUAL表是特定于Oracle的,并且在运行测试时会导致错误:

org.springframework.jdbc.BadSqlGrammarException: StatementCallback; 
    bad SQL grammar [select count(*) cnt from DUAL where exists 
                    (select null from ESRL_OBSERVATIONS where LOCATION = '/path1')];
nested exception is java.sql.SQLException: user lacks privilege or object 
    not found: DUAL
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议我可以做些什么来解决这个问题?我正在使用Hibernate来创建模式 - 也许我可以在我的Hibernate属性中创建一个设置,它将支持Oracle样式语法?

oracle junit hibernate jdbc hsqldb

4
推荐指数
2
解决办法
9955
查看次数

标签 统计

hsqldb ×3

hibernate ×2

junit ×2

oracle ×2

java ×1

jdbc ×1

rownum ×1

spring ×1