Hibernate-预期加入的路径
我有一个像这样的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
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我只是假设这两个实体可能通过某种关联关联,因此没有必要在该上下文中指定连接条件,而不管这两个实体通过什么列关联。但实体映射似乎会告诉我们,当提供了实体映射时,如何最好地编写查询。