我有像这样的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.doCompile(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) at 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.mshandloomfrabics.daoimp.UserDAOImp.login(UserDAOImp.java:40) 在com.nepitc.mshandloomfrabics.service.UserService.login(UserService.java:74) 在com.nepitc.mshandloomfrabics.controller.AuthorizationController.login(AuthorizationController.java:38)
如何正确编写
答案 0 :(得分:1)
在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