Reputation: 524
I have a hibernate query like this
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
But this query doesn't work Error
ERROR: Path expected for join! ERROR: Path expected for join! Path expected for join! at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:385) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3903) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3689) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3567) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:708) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:564) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:301) at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:249) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206) at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:131) at org.hibernate.engine.query.spi.HQLQueryPlan.(HQLQueryPlan.java:93) at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167) at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301) at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236) at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836) at com.nepitc.mshandloomfrabics.daoimp.UserDAOImp.login(UserDAOImp.java:40) at com.nepitc.mshandloomfrabics.service.UserService.login(UserService.java:74) at com.nepitc.mshandloomfrabics.controller.AuthorizationController.login(AuthorizationController.java:38)
How can I write it correctly
Upvotes: 0
Views: 1638
Reputation: 21133
In JPQL / HQL you do not need to specify the ON
clause for the join because Hibernate already knows the mappings between the two entities and the columns required to generate said join.
So you really only need to supply the predicatesand the request to perform the join as follows
SELECT u FROM User u
JOIN u.roles ur
WHERE u.username = :username
AND u.password = :password
AND ur.userRole = :role
Upvotes: 1