我在hql中使用select查询。但我不能在我的API中使用。
将错误视为:
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token:
有人能告诉我wat是My 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;
答案 0 :(得分:1)
我想使用本机查询,因为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
可以在WHERE
或HAVING
子句中使用。
答案 1 :(得分:1)
请注意,HQL子查询只能出现在 select或where子句中。
所以你可以使用nativeQuery,但我建议尽可能使用HQL来避免数据库可移植性的麻烦,并利用Hibernate的SQL生成和缓存策略。 而不是本机查询,您可以使用连接方法并链接它们。
注意HQL适用于持久对象及其属性 .HQL查询由Hibernate转换为传统的SQL查询,后者又对数据库执行操作。