GORM查询产生数据库错误(grails 1.1.1)

时间:2012-03-25 20:40:38

标签: sql grails gorm

(这是从grailsforum.co.uk交叉发布的)

大家好,我对Grails(以及Spring,Hibernate等)比较新,所以如果这是一个菜鸟问题,请原谅我。谷歌搜索让我无处可去,但搜索相当困难。

当我运行特定的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 [13262636@qtp-21448718-2] ERROR util.JDBCExceptionReporter  - ORA-00936: missing expression

我的研究和一般直觉告诉我,这可能是Grails或Spring中的一个错误,解决方案是更新到Grails的新版本。这绝对是路线图,因为我不是在最好的时候运行过时的webapps的粉丝,但我最近尝试升级到最新的1.x版本并不成功,我不知道现在有时间与它斗争。

我正在通过在调用查询时捕获异常来解决问题,但是在我们的日志文件中已经出现了足够的随机错误而没有添加更多内容,并且我希望尽可能正常运行。如果有人可以告诉我一个解决方案或更优雅的解决方法,或者至少告诉我这是否是一个已知问题,我将非常感激。

1 个答案:

答案 0 :(得分:1)

您可以按照here所述启用SQL日志记录来检查生成的SQL。获取该查询并在db上执行,看看它是否有效。那应该告诉你hibernate生成的sql是错误的还是你遗漏了什么。或者,您可以编写自己的命名查询并使用BETWEEN子句,看看它是否适用于所有情况。