在 Hibernate 中,我使用 JOIN
创建了一个查询来连接两个表。该查询在 Oracle 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
语法?
最佳答案
如果使用 HQL,则需要使用 with
指令:
SELECT foo
FROM FooEntity foo
JOIN foo.bar b with b.name = :name
WHERE foo.prop = :prop
这用于提供自定义ON
子句。从您的示例来看,从您连接表的方式来看,我认为您尝试使用 @NamedQuery
执行 native SQL。
如果您想运行 native SQL 查询,则必须使用 @NamedNativeQuery相反。
如果要使用 HQL,则需要使用实体并加入实体关联(而不是表)。
如果您使用 JPQL,则 with
指令必须替换为 on
指令,但同样,您需要导航实体关联,这意味着您必须映射它们首先。
关于java - 加入@NamedQuery : Unexpected token ON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28319233/