java - 加入@NamedQuery : Unexpected token ON

标签 java sql hibernate join named-query

在 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/

相关文章:

sql - 如何使用 in 谓词检查 spring data jpa @Query 中的 null 集合

Java Spring&Hibernate : Photos in Blog Posts

java - 基于 Java 中文本文件的搜索吐出随机行

java - 以编程方式更改 SIM 国家/地区?

sql - 如何在 PostgreSQL/SQL 中使用结果的子串

sql - 在给定特定条件 SQL 的情况下,仅对不同的值求和

java - Autowired 带注释的 bean 在 Listener 类中获取 null

java - 如何在 IntelliJ 中调试动态加载的 jar

java - 由于 handshake_failure,IOS 推送通知失败

sql - SELECT DISTINCT with LEFT JOIN, ORDERed BY in t-SQL