在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
语法吗?
如果您使用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指令,但同样,您需要导航实体关联,这意味着您必须首先映射它们。