Hibernate - путь, ожидаемый для присоединения - PullRequest
0 голосов
/ 03 июня 2018

У меня есть запрос гибернации, подобный этому

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 (Haval.hl.hlh.h3).antlr.HqlSqlBaseWalker.fromElement (HqlSqlBaseWalker.java:3689) при org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList (HqlSqlBaseWalker.java:3567) в org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause (HqlSqlBaseWalker0hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement (HqlSqlBaseWalker.java:249) в org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze (QueryTranslatorImpl.jternalg.hin.hin. athiber. ath.QueryTranslatorImpl.doCompile (QueryTranslatorImpl.java:206) в org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile (QueryTranslato)rImpl.java:158) в org.hibernate.engine.query.spi.HQLQueryPlan. (HQLQueryPlan.java:131) в org.hibernate.engine.query.spi.HQLQueryPlan. (HQLQueryPlan.java:93) в org.hiber.engine.query.spi.QueryPlanCache.getHQLQueryPlan (QueryPlanCache.java:167) в org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan (AbstractSessionImpl.java:301) в org.hibernate.internalImp.S.) в org.hibernate.internal.SessionImpl.createQuery (SessionImpl.java:1836) в com.nepitc.mshandloomfrabics.daoimp.UserDAOImp.login (UserDAOImp.java:40) в com.nepitc.mshandloomfrabics.ser.UserService.java:74) at com.nepitc.mshandloomfrabics.controller.AuthorizationController.login (AuthorizationController.java:38)

Как правильно написать это

1 Ответ

0 голосов
/ 03 июня 2018

В 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...