在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
语法?
答案 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
指令替换,但同样,您需要导航实体关联,这意味着您必须先映射它们。