Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Запрос через Hibernate не может найти колонку


Автор: Royan 6.7.2009, 21:24
Получаю exception:

Цитата

09/07/06 22:02:08 INFO type.StringType: could not read column value from result set: name; Column 'name' not found.
09/07/06 22:02:08 WARN util.JDBCExceptionReporter: SQL Error: 0, SQLState: S0022
09/07/06 22:02:08 ERROR util.JDBCExceptionReporter: Column 'name' not found.

Exception in thread "AWT-EventQueue-0" org.hibernate.exception.SQLGrammarException: could not execute query
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)



Со включенным hibernate.show_sql вижу вот такой запрос. 

Код

SELECT Track.name as IPL FROM Playlist INNER JOIN (User, Track) ON Playlist.neigh_id=User.id AND Playlist.track_id=Track.id WHERE Playlist.user_id=138


Если его выполнить из консоли MySQL, то все выполняется на раз. Свойство или поле name таблицы Track прекрасно замамплено и в десятке других запросов проблем не вызывает. Пожалуйста, помогите советом.

Автор: COVD 7.7.2009, 02:32
в resultSet нет колонки name, а есть IPL, потому что SELECT Track.name as IPL. 

Автор: Royan 7.7.2009, 11:41
COVD, большое спасибо! Действительно помогло, правда я не понимаю каким образом Hibernate'у понадобилось именно название колонки. Но ввиду предложенного тобой решения выплыла другая проблема. Допустим я хочу выбрать два поля из двух разных таблиц (Track.name, User.name ) использую такой запрос:

Код

SELECT Track.name, User.name FROM Playlist INNER JOIN (User, Track) ON Playlist.neigh_id=User.id AND Playlist.track_id=Track.id WHERE Playlist.user_id=335;


Результат есть, но вместо ожидаемого:


+-----------+--------+
| name      | name   |
+-----------+--------+
| Track_101 | User_1 |
| Track_262 | User_2 |
| Track_313 | User_3 |
| Track_765 | User_4 |


Выбирается 


+-----------+-----------+
| name      | name      |
+-----------+-----------+
| Track_101 | Track_101 |
| Track_262 | Track_262 |
| Track_313 | Track_313 |
| Track_765 | Track_765 |


То есть Hibernate вместо того, чтобы во вторую колонку resultSet'а подставить User.name ставит туда Track.name. MySQL при этом нормально выбирает значения этим же запросом (взятым из консольного выхлопа того же Hibernate) 


Консольный выхлоп Hibernate:
Код

SELECT Track.name, User.name FROM Playlist INNER JOIN (User, Track) ON Playlist.neigh_id=User.id AND Playlist.track_id=Track.id WHERE Playlist.user_id=84


Что делать? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)