加入@NamedQuery:意外的令牌打开

Join in @NamedQuery: Unexpected token ON

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

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

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

你需要使用with指令,如果你使用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,则必须将 with 指令替换为 on 指令,但同样,您需要导航实体关联,这意味着您必须先映射它们。