加入@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
指令,但同样,您需要导航实体关联,这意味着您必须先映射它们。
在 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 查询,则必须改用 @NamedNativeQuery。
如果要使用 HQL,则需要使用实体并加入实体关联(而不是表)。
如果您使用 JPQL,则必须将 with
指令替换为 on
指令,但同样,您需要导航实体关联,这意味着您必须先映射它们。