(это кросс-пост от grailsforum.co.uk)
Привет всем, я относительно новичок в Grails (и в Spring, Hibernate и т. Д.), Поэтому, пожалуйста, прости меня, если это вопрос нуба. Поиск в Google ни к чему не привел, но это довольно сложная проблема для поиска.
Когда я запускаю конкретный запрос GORM (в grails 1.1.1), он обычно работает нормально, но в случае, когда в базе данных нет соответствующих записей, вместо того, чтобы ничего не возвращать, я получаю исключение, всплывающее прямо из уровень драйвера базы данных. Я задавался вопросом, была ли это проблема с конкретной разновидностью Oracle, в которой работает моя локальная база данных dev, но это также происходит при работе в базе данных JDBC в памяти и на удаленном сервере dev, который имеет базу данных, эквивалентную тем, которые мы использование производственных серверов. Насколько я могу судить, кажется, что где-то внизу запрос фактически переходит в недопустимый 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. Это определенно входит в план, так как я не являюсь поклонником запуска устаревших веб-приложений в лучшие времена, но моя недавняя попытка перейти на последнюю версию 1.x не увенчалась успехом, и я не есть время, чтобы бороться с этим прямо сейчас.
Я работаю над этой проблемой, улавливая исключение при вызове запроса, но в наших лог-файлах уже достаточно случайных ошибок, не добавляя больше, и я хотел бы, чтобы это работало должным образом, если это вообще возможно. Если кто-то может посоветовать мне решение или более изящный обходной путь или хотя бы сообщить мне, если это известная проблема, я был бы очень признателен.