Соединение трех таблиц с запросом гибернации - PullRequest
1 голос
/ 12 ноября 2011

Мне очень жаль беспокоить Stack Overflow еще одним вопросом по этим запросам гибернации, но прошло уже около четырех часов, и я пытался решить эту проблему, но пока безуспешно.

Проблема заключается в следующем. У меня есть модель, которая имеет дело с "Котировки", "Источники" и "Позиции". Цитата - это цитата из книги, пьесы, тезиса и т. Д. - это многообразие и есть объекты «Источники». И точное место, где цитата в Источнике - это Позиция. Так, например, «blablablabla» (цитата) есть на «странице 12 в главе 5» (позиция) «Искусства программирования» (Источник).

Теперь я хочу получить все «Позиции», уже зарегистрированные для «Источника». Но между этими двумя нет прямого сопоставления, и я бы хотел избежать этой связи (хотя я начинаю верить, что других решений нет). С другой стороны, у объектов Quote есть Источник и Позиция.

Это выдержка из класса цитаты:

public class Quote
{

   @ManyToOne(cascade=CascadeType.ALL)
   Position position;

   @ManyToOne(cascade=CascadeType.ALL)
   Source source;

       // ... other stuff

}

Сначала я просто получил некоторые исключения "нет пути для соединения", поэтому я прочитал все, что смог найти в переполнении стека. Если я правильно понимаю, мой запрос должен выглядеть примерно так:

currentSession.createQuery("from Position 
inner join Quote quote, Source source where  quote.source = :idSource");

Но даже так я получил это исключение:

Unable to resolve path [quote.source], unexpected token [quote]

Я где-то допустил ошибку или слишком много спрашиваю о Hibernate? Заранее благодарю за помощь.

1 Ответ

1 голос
/ 12 ноября 2011

Запрос, который вы ищете:

select q.position
  from Quote q
 where q.source = :source

Обратите внимание, что вы должны передавать фактическую сущность Source в качестве параметра здесь; если вы хотите передать только его идентификатор, последняя строка должна вместо этого прочитать where q.source.id = :idSource (при условии, что ваше свойство идентификатора id).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...