2012-03-25 8 views
1

(これはgrailsforum.co.ukからのクロスポストされた)GORMクエリがデータベース・エラー(Grailsの1.1.1)

こんにちはすべてを生産するので、私はGrailsのには比較的新しいです(と春、休止状態、など)これがノブの質問であれば、私を許してください。グーグルが私をどこにも連れてこなかったが、検索するのはむしろ難しい問題だ。

特定のGORMクエリ(grails 1.1.1)を実行すると正常に動作しますが、データベースに一致するレコードがない場合、何も返さず、代わりにバブリング例外が発生しますデータベースドライバレベルから取得します。私はこれがOracleの特定の味の問題であるかどうか疑問に思っていました。私のローカルdevデータベースが動作していますが、これはメモリ内のJDBCデータベースと、運用サーバーが使用します。私が知る限り、クエリの行が実際に無効なSQLに解決されていることがわかります。

クエリは、大学の学期を表すドメインクラスCourseTermにあります。このクラスは、開始日と終了日をプロパティとして定義します。どのコースの条件が存在する場合、これは完璧に動作し、

def currentCourseTerms(date = new Date()) { 
    return CourseTerm.findAllByCourseStartDateLessThanAndCourseFinishDateGreaterThan(date, date) 
} 

を私が言うように:私のクエリは以下のように、(彼らがオーバーラップすることができますように、複数があるかもしれません)指定した日付のアクティブすべてのコースの用語のセットを選択することを目指してこれはクエリに一致します。しかし、誰用語は現在ありません場合には、要求が失敗し、私は次の出力を得る:

Error 500: org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query 
Servlet: grails 
URI: /ltrp/grails/scheduleableCourse/list.dispatch 
Exception Message: ORA-00936: missing expression 
Caused by: org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query 
Class: ScheduleableCourseController 

私は、ログ出力を取得し、私のワークステーションでは、私はまた、これを参照してください。

2012-03-23 15:04:18,664 [[email protected]] ERROR util.JDBCExceptionReporter - ORA-00936: missing expression 

マイ研究と一般的な直感から、これはおそらくGrailsやSpringのバグであり、解決策はGrailsの新しいバージョンに更新することだと私に伝えています。これは間違いなく、ロードマップ上にあります。私は時代遅れのWebアプリケーションを実行するファンではありませんが、最近の1.xリリースへのアップグレードは成功しませんでした。今それと戦う時間があります。

私は、クエリが呼び出されたときに例外をキャッチすることで問題を回避していますが、すでに追加していないログファイルには十分なランダムエラーが表示されています。 。誰かが私に解決策やより洗練された回避策を知らせることができ、あるいはこれが既知の問題かどうかを少なくとも私に知らせることができれば、私はそれを非常に高く評価します。

答えて

1

hereに記載されているように、SQLロギングをオンにすることによって生成されたSQLをチェックすることができます。クエリを実行してdbを実行し、それが動作するかどうかを確認します。これは、hibernateによって生成されたSQLがエラーになっているか、何かが欠落しているかどうかを示すはずです。あるいは、独自の名前付きクエリを作成し、BETWEEN句を使用して、すべてのケースで動作するかどうかを確認することもできます。

関連する問題