HQL 查询中的语法错误 "unexpected token"

Syntax error in HQL Query "unexpected token"

我在 hql 中使用 select 查询。但是我无法在 API.

中使用

获取错误为:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token:

谁能告诉我我的 HQL 中的错误是什么

供您参考的代码:

Session session = SessionUtil.getSession();

Query query = session.createQuery("SELECT a.mobile, a.email, p.patientId FROM (SELECT l "
        + "from login l where email= :email and password= :password) a INNER JOIN patientprofile p ON a.loginId= p.loginId");
query.setParameter("email", email);
query.setParameter("password", password);
List<Login> logins = query.list();
session.close();
return logins;

我想改用本机查询,因为 HQL 和 JPQL 都接受 子查询 就在 SELECT、WHERE 或 HAVING 子句中,因此您可以使用 :

Query query = session.createNativeQuery("SELECT a.mobile, a.email, p.patientId FROM "
        + "(SELECT * from login l where email= :email and password= :password) a "
        + "INNER JOIN patientprofile p ON a.loginId= p.loginId");
query.setParameter("email", email);
query.setParameter("password", password);

JPQL documentation

中阅读更多相关信息

Subqueries may be used in the WHERE or HAVING clause.

请注意,HQL 子查询只能出现在 select 或 where 子句中。

因此您可以使用 nativeQuery,但我建议尽可能使用 HQL 以避免数据库可移植性麻烦,并利用 Hibernate 的 SQL 生成和缓存策略。 您可以使用 join 方法和 link 它们来代替本机查询。

注意 HQL 使用 持久对象及其属性。HQL 查询由 Hibernate 转换为常规 SQL 查询,后者依次对数据库执行操作。