加入@NamedQuery:意外的令牌ON

时间:2015-02-04 10:39:00

标签: java sql hibernate join named-query

在Hibernate中,我使用JOIN创建了一个查询来连接两个表。查询在Oracles SQL Developer中执行正常。但是,如果我将其添加到@NamedQuery,服务器将以此错误启动:

  

命名查询错误:loadFooByAnother:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:ON第1行,第xxx列

我的命名查询是:

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

是不是可以在Hibernate中使用JOIN .. ON语法?

1 个答案:

答案 0 :(得分:3)

如果使用HQL,则需要使用with指令:

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

这是用于提供自定义ON子句。从您的示例中,根据您如何连接表来判断,我认为您尝试使用@NamedQuery执行本机SQL。

如果要运行本机SQL查询,则必须改为使用@NamedNativeQuery

如果要使用HQL,则需要使用实体并加入实体关联(而不是表)。

如果使用JPQL,则with指令必须由on指令替换,但同样,您需要导航实体关联,这意味着您必须先映射它们。