2012-03-25 50 views
1

(從grailsforum.co.uk這是跨張貼)GORM查詢生成數據庫錯誤(Grails的1.1.1)

大家好,我是比較新的的Grails(和Spring,Hibernate的,等等),所以請原諒我,如果這是一個noob問題。谷歌搜索讓我無處可尋,但這是一個相當難以搜索的問題。

當我運行一個特定的GORM查詢(在grails 1.1.1中)時,它通常可以正常工作,但是在數據庫中沒有匹配的記錄的情況下,我不會返回任何內容,而是會立即得到一個異常冒泡從數據庫驅動程序級別。我想知道這是否與我的本地開發數據庫運行Oracle的特定風格有關,但在內存中的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中的一個bug,並且解決方案將更新爲更新版本的Grails。這絕對是在路線圖上,因爲我不是在最好的時候運行過時的web應用程序的粉絲,但是我最近嘗試升級到最新的1.x版本並不成功,而且我也沒有現在有時間與它鬥爭。

我正在通過捕獲異常時查詢被調用,但有足夠的隨機錯誤顯示在我們的日誌文件中已經沒有添加更多,我想這個功能正常,如果可能的話。如果任何人可以告訴我一個解決方案或更優雅的解決方法,或至少告訴我,如果這是一個已知的問題,我將非常感激。

回答

1

您可以按照here的說明打開SQL日誌記錄來檢查生成的SQL。採取該查詢並在數據庫上執行,看看它是否工作。這應該告訴你,如果由休眠產生的SQL是錯誤的,或者你錯過了什麼。或者,您可以編寫自己的命名查詢並使用BETWEEN子句並查看是否適用於所有情況。