Использование Hibernate Criteria API для запроса отношений «многие к одному» с проекциями

Я пытаюсь использовать Criteria API в следующем сценарии:

  • У меня есть две таблицы, Schedule и Route (с их классами и отображениями).
  • Route имеет отношение "многие к одному" с Schedule.
  • Route имеет целочисленное свойство sequence.

Теперь мне нужно получить все те объекты Schedule, связанные объекты Route которых удовлетворяют следующему условию:

route.sequence=no. of all Route objects associated with the given Schedule object

Я пробовал для него следующий код Criteria:

Criteria crit = getSession().createCriteria(getPersistentClass())
    .createCriteria("routes", "route")
    .setProjection(Projections.projectionList()
    .add( Projections.rowCount(), "routeCount"))
    .add(Restrictions.not(Restrictions.ltProperty("route.sequence", "routeCount")));

Но он генерирует следующий sql:

select count(*) as y0_ 
from schedule this_
inner join route route1_ on this_.ID=route1_.scheduleId
where route1_.sequence<y0_

и выдает следующую ошибку:

Unknown column 'y0_' in 'where clause'

Пожалуйста, помогите мне, если у вас есть какие-либо предложения.


person craftsman    schedule 19.11.2009    source источник
comment
Я не понимаю вашего псевдокода-условия. Вы действительно имеете в виду, что все маршруты должны иметь одинаковый порядковый номер?   -  person meriton    schedule 19.11.2009
comment
Один объект «Расписание» может иметь n объектов «Маршрут». (где n обычно равно 2 или 3). Значение Route.sequence может принимать значения от 0 до n-1. На самом деле это схема простой системы полетной информации. Таблица расписания содержит такую ​​информацию, как номер рейса, дата/время расписания и статус рейса. Города, составляющие маршрут рейса, заносятся в таблицу Route (поскольку для каждого рейса может быть разное количество городов маршрута). Номер Route.sequence определяет последовательность, в которой находится город для рейса.   -  person craftsman    schedule 20.11.2009
comment
Запрос, который я пытаюсь составить с помощью Criteria API, заключается в поиске всех рейсов, прибывающих в заданный город X.   -  person craftsman    schedule 20.11.2009


Ответы (1)


Проблема связана с проблемой реализации с прогнозами и ограничениями. Казалось, что при попытке спроецировать и ограничить один и тот же столбец произошла ошибка - сгенерированный sql недействителен. Вы обнаружите, что если запустить этот sql непосредственно для вашей базы данных, он не будет работать.

Первоначально ошибка была зарегистрирована здесь, и казалось, что ее не будет. фиксированный. Но затем я вижу, что другая похожая ошибка была зарегистрирована здесь, но я не могу Не могу определить, в каком выпуске будет доступно исправление.

Обсуждение, которое больше касается проблемы и лежащей в ее основе теории, можно найти здесь.

Существует также еще один элемент stackoverflow, касающийся того же вопроса и предлагает решение. Я не пытался проверить, работает ли этот подход, но, похоже, он сработал для людей, вовлеченных в проблему.

person Rachel    schedule 24.11.2009