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);
中阅读更多相关信息
Subqueries
may be used in the WHERE
or HAVING
clause.
请注意,HQL 子查询只能出现在 select 或 where 子句中。
因此您可以使用 nativeQuery,但我建议尽可能使用 HQL 以避免数据库可移植性麻烦,并利用 Hibernate 的 SQL 生成和缓存策略。
您可以使用 join 方法和 link 它们来代替本机查询。
注意 HQL 使用 持久对象及其属性。HQL 查询由 Hibernate 转换为常规 SQL 查询,后者依次对数据库执行操作。
我在 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);
中阅读更多相关信息
Subqueries
may be used in theWHERE
orHAVING
clause.
请注意,HQL 子查询只能出现在 select 或 where 子句中。
因此您可以使用 nativeQuery,但我建议尽可能使用 HQL 以避免数据库可移植性麻烦,并利用 Hibernate 的 SQL 生成和缓存策略。 您可以使用 join 方法和 link 它们来代替本机查询。
注意 HQL 使用 持久对象及其属性。HQL 查询由 Hibernate 转换为常规 SQL 查询,后者依次对数据库执行操作。