2015-02-04 2 views
2

В Hibernate я создал запрос, используя JOIN, чтобы соединить две таблицы. Запрос выполняется в Oracles SQL Developer. Однако, если добавить его к @NamedQuery, сервер начинается с этой ошибкой:Присоединиться к @NamedQuery: Неожиданный токен ON

Error in named query: loadFooByAnother: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ON near line 1, column xxx

Мой назвал запрос:

SELECT foo FROM FooTable foo JOIN BarTable bar 
    ON foo.something=bar.somethingId 
    WHERE bar.anotherId=:another 

Разве нельзя использовать JOIN .. ON синтаксис в Hibernate?

ответ

3

Вы должны использовать with директивы, если вы используете HQL:

SELECT foo 
FROM FooEntity foo 
JOIN foo.bar b with b.name = :name 
WHERE foo.prop = :prop 

Это для поставки обычая ON пункта. Из вашего примера, судя по тому, как вы присоединились к таблицам, я думаю, вы пытались выполнить собственный SQL с помощью @NamedQuery.

Если вы хотите запустить собственный SQL-запрос, вместо этого вы должны использовать @NamedNativeQuery.

Если вы хотите использовать HQL, вам необходимо использовать Entities и присоединиться к ассоциациям Entity (а не таблицам).

Если вы используете JPQL, тогда директива with должна быть заменена директивой on, но вам также необходимо провести сопоставление сущностей, что означает, что вы должны сначала сопоставить их.

+0

Благодарим за внимание, что есть '' @ NamedQuery'' и '' @ NamedNativeQuery''. Затем я перепутал собственный SQL и HQL. Единственная ссылка для ключевого слова '' WITH'' находится в [этой статье] (https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-joins), хотя , – user1438038

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