DAO に Oracle データベースにクエリを実行するメソッドがあり、アプリケーションで正常に動作しています。ただし、テストには Hsqldb を使用し、テストには Spring-junit を使用しています。同じメソッドがテスト中にエラーを返すのは、HSQL がサブクエリをサポートしていないことがわかっているためです。
原因: org.hsqldb.HsqlException: 予期しないトークン: START が必要: )
この場合、どうすればよいか教えていただけないでしょうか。Spring を使用してこのメソッドをモックして、実際には呼び出しを行わず、構成によって事前定義された結果を得ることができるでしょうか?
どんなアドバイスでも大歓迎です!
メソッドは次のとおりです。
private Long getRootParent(Long id) {
StringBuilder sqlQuery = new StringBuilder();
sqlQuery.append("SELECT ID FROM ");
sqlQuery.append(" ( SELECT MAX(level) , ff.ID FROM FOREF_FUND ff ");
sqlQuery.append(" START WITH ff.ID = ? ");
sqlQuery.append(" CONNECT BY PRIOR ff.PARENT_FK = ff.ID ");
sqlQuery.append(" GROUP BY ff.ID ORDER BY MAX (level) DESC ) ");
sqlQuery.append(" where rownum = 1 ");
SQLQuery query = this.createSQLQuery(sqlQuery.toString());
query.setParameter(0, id);
List result = query.list();
if (result != null && !result.isEmpty()) {
return ((BigDecimal) result.get(0)).longValue();
}
return null;
}