2015-05-08 3 views
3

У меня есть следующие HQL:HQL бросает исключение при добавлении оператор ИЛИ

select r from Route r where r.startingStop.description = 'Railway Station' 

Теперь я изменил мою HQL к:

select r from Route r where r.startingStop.description = 'Railway Station' or r.destinationStop.description = 'Railway Station' 

И я получаю следующее исключение:

org.hibernate.exception.DataException: Subquery returns more than 1 row 

Я исследовал Stackoverflow об этом исключении, но я все еще не мог решить свою проблему. Заранее спасибо.

Моих полей (однонаправленное отображение):

@ManyToOne(fetch=FetchType.EAGER) 
@JoinColumn(name = "starting_stop") 
private BusStop startingStop; 

@ManyToOne(fetch=FetchType.EAGER) 
@JoinColumn(name = "destination_stop") 
private BusStop destinationStop; 
+0

Используете ли вы его как подзапрос или это весь запрос? – Jens

+0

Я сомневаюсь, что этот запрос является тем, кто выбрасывает это исключение. Поместите полную трассировку стека и соответствующий код (т. Е. Код, который вызывает это исключение). –

+0

Это полный запрос –

ответ

0

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

Причина: Внешний запрос должен использовать один из ключевых слов ANY, ALL, IN или NOT IN указать значения для сравнения, потому что подзапроса возвращается более одной строки.

Действие: Использование ANY, ALL, IN или NOT IN указать, какие значения для сравнения или перефразировать запрос таким образом, только один ряд извлекаемый.

Предложение: Попробуйте добавить и rownum=1 к вашим условиям подзапросов, если вы НЕ заботиться о ценности из списка или DO убедитесь, что они одинаковы.

0

Запрос работает нормально, но проблема в том, что он возвращает более 1 строки. Вы пытаетесь использовать результат как 1 объект, но с предложением или оно возвращает более одного и выдает исключение. Если вы используете его как подзапрос, например, и вы говорите:

Что-то = (ваш запрос), он не сработает, потому что ваш запрос возвращает 2 результата.

Если вы попытаетесь сопоставить его с одним объектом, это также будет проблемой, потому что вы получите более 1 результата.

Смежные вопросы