Java HQL查询“意外令牌”中的语法错误
我正在hql中使用select查询。但是我不能在我的API中使用 将错误获取为: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
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]