2014-02-04 3 views
0

У меня есть три таблицы: камеры - [id, address, city, url, server_name, ...] vlc - [id, camera_id (что равно id в камерах) , server_name, порт, статус] категории - [идентификатор, имя]Ошибка синтаксиса Спящий режим - неожиданный токен: ВКЛ

Услышь мой MySQl Синтаксис, который дал мне хороший результат:

"SELECT vlc.camera_id, vlc.url, vlc.port," 
+ " vlc.server_name, cameras.address, cameras.city, categories.name FROM vlc AS vlc" + 
" INNER JOIN cameras ON vlc.camera_id = cameras.id" + 
" INNER JOIN categories ON cameras.category_id = categories.id" 
+ " WHERE vlc.status = 'active' AND ") 

Но в Hibernate я получил эту ошибку синтаксиса:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ON near line 1, column 141 

Любой может помочь? Я знаю, что это может быть очевидно, но я не могу найти решение.

EDIT: я изменил:

@SuppressWarnings("unchecked") 
public List<VLC> getVLCs() { 
    return getCurrentSession().createSQLQuery("SELECT vlc.camera_id, vlc.url, vlc.port," 
        + " vlc.server_name, cameras.address, cameras.city, categories.name FROM vlc AS vlc" + 
        " INNER JOIN cameras ON vlc.camera_id = cameras.id" + 
        " INNER JOIN categories ON cameras.category_id = categories.id" 
        + " WHERE vlc.status = 'active'").list(); 
} 

Но теперь я получил:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to pl.humandevice.model.VLC 

я должен изменить что-то в моих классах Propably

+1

Вы пытаетесь использовать собственные запросы или HQL? –

+0

Покажите, где вы используете этот запрос. Убедитесь, что вы используете метод 'createSQLQuery', а не' createQuery' – Divers

+0

, вероятно, инструкции HQL –

ответ

0

Вы изменили его на собственный SQL, но вы делаете проекцию с атрибутами как из объектов VLC, так и из камеры. Вам нужно либо ограничить выбор объектов VLC, чтобы Hibernate знал, как сопоставить запрошенный список атрибутов в объектах VLC, или явно конвертируйте их самостоятельно, получив список OBject [], а затем выберем каждое значение самостоятельно.

0

Использование createSQLQuery вместо createQuery. Второй для HQL (Hibernate Query Language) вместо SQL.

UPD: Использование спящего режима SQL не может переносить полученные данные на объекты. Вот почему вы должны использовать HQL.

.: например

public List<VLC> getVLCs() { 
    return getCurrentSession().createQuery("from Cat as cat inner join fetch cat.mate left join fetch cat.kittens").list(); 
} 

Где Кошка Класс отображается в таблице.

+0

какая разница между ними ?? – Simmant

+0

HQL - для объектов, сопоставленных с таблицами, SQL для таблиц. – Divers

+0

okk я забыл, что немного спасибо за обзор – Simmant

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