![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
megaproger |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.7.2006 Где: Москва Репутация: нет Всего: нет |
Здравствуйте !
У меня такая проблема: использую нативный SQL в Hibernate, пишу запрос типа: Query sqlQuery = HibernateUtil.currentSession().createSQLQuery("select {EntitiesFieldValues.*} from entitiesfieldsvalues {EntitiesFieldValues} " + " where EXISTS (select id as {Relations.id},id1 as {Relations.id1},id2 as {Relations.id2} from relations rel where rel.id2=4268) , new String[]{"EntitiesFieldValues","Relations"}, new Class[]{EntitiesFieldValues.class,Relations.class}); при выполнении запроса вываливается Exception: 20:16:56,421 WARN main JDBCExceptionReporter.logExceptions:57 - SQL Error: 0, SQLState: 42703 20:16:56,421 ERROR main JDBCExceptionReporter.logExceptions:58 - Имя колонки id1_ не найдено в этом ResultSetе. При различных перестановках понятно,что под id1_ подразумевается Relations Хотя если делать выборку из этих таблиц отдельно таким же методом, то всё работает и Relations воспринимается нормально. Подразумеваю что всё из за exists, может кто подскажет что делать? Без EXISTS мне никак не обойтись ![]() |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Включи в Hibernate показ запросов, которые он выполняет и посмотри в логе что за запрос в результате получается. Может быть Hibernate что-то неправильно интерпретирует, например exists принимает за ключевое слово.
|
|||
|
||||
megaproger |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.7.2006 Где: Москва Репутация: нет Всего: нет |
show_sql у меня включено - лог эксепшена был взят оттуда, просто если "Relations" стоит на первом месте то жалуется на id0_ , если на втором то на id1_ , на exists жалоб нет. Использую нативные запросы для того ,что нужно слово Union в дальнейшем,которое Hibernate не понимает.
Добавлено @ 10:00 Вот сформированный Hibernate запрос : select EntitiesFieldValues.id as id0_, EntitiesFieldValues.value as value0_, EntitiesFieldValues.fieldsid as fieldsid0_, EntitiesFieldValues.primarykeyfieldvalueid as primaryk4_0_, EntitiesFieldValues.date as date0_ from entitiesfieldsvalues EntitiesFieldValues where EXISTS (select id as id1_,id1 as id11_,id2 as id21_ from relations rel where rel.id2=4268) Hibernate: select EntitiesFieldValues.id as id0_, EntitiesFieldValues.value as value0_, EntitiesFieldValues.fieldsid as fieldsid0_, EntitiesFieldValues.primarykeyfieldvalueid as primaryk4_0_, EntitiesFieldValues.date as date0_ from entitiesfieldsvalues EntitiesFieldValues where EXISTS (select id as id1_,id1 as id11_,id2 as id21_ from relations rel where rel.id2=4268) |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
А, все, понял. В общем так... Hibernate именует каждое поле в результате по своему чтобы потом найти его в результате запроса. В твоем случае конструкции типа {Relations.id} он заменяет на id##, а потом пытается найти в ResultSet чтобы сформировать объект. Но прикол в том, что в ResultSet этих полей-то и нет, ведь результат запроса внутри EXISTS() у тебя используется лишь для того, чтобы определить наличие записей, соответствующих условию.
Тебе нужно просто убрать все конструкции Hibernate внутри EXISTS() (они ведь там не нужны - в объект результат этого запроса не выдается) и оставить простой нативный запрос к БД и убрать из массивов описание класса Relations. |
|||
|
||||
megaproger |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 25.7.2006 Где: Москва Репутация: нет Всего: нет |
Огромное спасибо, всё заработало...А то бы я долго с этим мучался и всё равно бы не догадался.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |