0
votes

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

1
Your join syntax is off, for one thing, probably leading to the immediate error you face. For this and other errors, please read the official documentation: docs.jboss.org/hibernate/orm/3.3/reference/en/html/… - Tim Biegeleisen
@TimBiegeleisen While much of this hasn't changed in a while, it's probably more appropriate to link to more updated documentation than the older 3.3 release from 10 years ago. - Naros
Please include both the full error and entity mappings for both entities. - Naros

1 Answers

1
votes

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