2012-07-02 4 views
1

Я строю запросы в HQL с присоединиться, и я уже стопке одно:разница между запросами

мой запрос выглядит так:

From HistoryPerPhraseEntity as history left join history.linkAddressByLinkId where history.serviceId = :serviceId 

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

historyPhrase.get(0).getPhraseId() 

я получил:

[Ljava.lang.Object; cannot be cast to com.rasp.lta.domain.HistoryPerPhraseEntity 

, но после того, как изменения в это:

Select history From HistoryPerPhraseEntity as history left join history.linkAddressByLinkId where history.serviceId = :serviceId 

все в порядке.

Может ли кто-нибудь ответить, почему мне нужно «выбрать» в этом запросе?

Благодаря

ответ

2

Поскольку без явного SELECT, Hibernate не может понять, что только экземпляры HistoryPerPhraseEntity должны быть возвращены. Он возвращает также объединенные объекты.

Именно поэтому он возвращает список объектов массивов. Первый индекс массива содержит HistoryPerPhraseEntity, а тип объекта во втором индексе такой же, как тип элемента в коллекции linkAddressByLinkId.

Если вы по какой-то причине хотите получить доступ только HistoryPerPhraseEntity возвращенного первым запросом, что может быть сделано путем литья каждого элемента возвращаемого списка Object[] и литья Object[0] в HistoryPerPhraseEntity

Лучше использовать SELECT, хотя.

+0

Спасибо за ответ. Я не знал. еще раз спасибо – Ilkar

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