Chris Hadfield
Chris Hadfield

Reputation: 524

Hibernate - Path expected for join

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

Answers (1)

Naros
Naros

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

Related Questions