【问题标题】:GORM query produces database error (grails 1.1.1)GORM 查询产生数据库错误(grails 1.1.1)
【发布时间】:2012-03-25 20:40:37
【问题描述】:

(这是从 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 版本没有成功,而且我没有现在有时间与之抗争。

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

【问题讨论】:

    标签: sql grails grails-orm


    【解决方案1】:

    您可以按照here 的描述打开 SQL 日志记录来检查生成的 SQL。获取该查询并在数据库上执行,看看它是否有效。这应该会告诉您 hibernate 生成的 sql 是否有错误,或者您是否遗漏了某些内容。或者,您可以编写自己的命名查询并使用 BETWEEN 子句,看看是否适用于所有情况。

    【讨论】:

      猜你喜欢
      • 2016-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2013-09-03
      相关资源
      最近更新 更多