提问者:小点点

加入@NamedQuery:意外令牌开启


在Hibernate中,我使用JOIN创建了一个查询来连接两个表。查询在OracleSQLDeveloper中执行得很好。但是,如果我将其添加到@NamedQuery,服务器会以以下错误启动:

命名查询中的错误:loadFoBy另一个:org. hibernate.hql.内部.ast.QuerySyntazException:意外令牌:第1行附近的第xxx列

我的命名查询是:

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

在Hibernate中不能使用JOIN… ON语法吗?


共1个答案

匿名用户

如果您使用HQL,则需要将指令一起使用:

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

这用于提供自定义ON子句。从您的示例中,从您连接表的方式来看,我认为您尝试使用@NamedQuery执行本机SQL。

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

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

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