Java HQL查询“意外令牌”中的语法错误

Java HQL查询“意外令牌”中的语法错误,java,sql,hibernate,jpql,Java,Sql,Hibernate,Jpql,我正在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.pat

我正在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);
请在中阅读更多关于此的信息

子查询可以在WHERE或HAVING子句中使用


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

因此,您可以使用nativeQuery,但我建议尽可能使用HQL,以避免数据库可移植性问题,并利用Hibernate的SQL生成和缓存策略。 您可以使用联接方法并链接它们,而不是本机查询


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

您可以共享完整错误@mree plesseorg.Hibernate.HQL.internal.ast.QuerySyntaxException:意外标记:第44列第1行附近[从com.innovellent.hibernate.restapi.model.Login中选择a.mobile、a.email、p.patientId,其中email=:email和password=:password a internal JOIN com.innovellent.hibernate.restapi.model.PatientProfile p ON a.LoginId=p.LoginId]