2012-03-25 22 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子句并查看是否适用于所有情况。