Hibernate-预期加入的路径

Hibernate-预期加入的路径,hibernate,Hibernate,我有一个像这样的hibernate查询 SELECT t FROM User t JOIN UserRole u ON t.username = u.username WHERE t.username=:username AND t.password =:pass AND u.userRole =:ust 但是这个查询不起作用 错误 错误:预期加入的路径! 错误:预期加入的路径! 预期加入的路径! 位于org.hibernate.hql.internal.ast.HqlSqlWalker.cr

我有一个像这样的hibernate查询

SELECT t FROM User t JOIN UserRole u ON t.username = u.username WHERE t.username=:username AND t.password =:pass AND u.userRole =:ust
但是这个查询不起作用 错误

错误:预期加入的路径! 错误:预期加入的路径! 预期加入的路径! 位于org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:385) 位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3903) 位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3689) 位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3567) 位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:708) 位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:564) 位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) 位于org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249) 位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278) 位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.docomFile(QueryTranslatorImpl.java:206) 位于org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) 位于org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:131) 在org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:93) 位于org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167) 位于org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) 位于org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) 位于org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836) 登录com.nepitc.mshandlomfrabics.daoimp.UserDAOImp.login(UserDAOImp.java:40) 在com.nepitc.mshandlomfrabics.service.UserService.login上(UserService.java:74) 位于com.nepitc.mshandlomfrabics.controller.AuthorizationController.login(AuthorizationController.java:38)


如何在JPQL/HQL中正确写入它您不需要为连接指定
ON
子句,因为Hibernate已经知道生成所述连接所需的两个实体和列之间的映射

因此,您实际上只需要提供谓词和请求即可执行连接,如下所示

SELECT u FROM User u 
  JOIN u.roles ur
 WHERE u.username = :username
   AND u.password = :password
   AND ur.userRole = :role

首先,您的连接语法是关闭的,这可能会导致您面临的直接错误。对于这一错误和其他错误,请阅读官方文档:@TimBiegeleisen虽然其中的许多错误在一段时间内没有改变,与10年前较旧的3.3版本相比,链接到更新更多的文档可能更合适。请包括两个实体的完整错误和实体映射。Hibernate如何知道使用
username
列加入,与其他列相反?@TimBiegeleisen我只是假设这两个实体可能通过某种关联关联,因此没有必要在该上下文中指定连接条件,而不管这两个实体通过什么列关联。但实体映射似乎会告诉我们,当提供了实体映射时,如何最好地编写查询。