Hibernate - 加入

时间:2018-06-03 08:32:56

标签: hibernate

我有像这样的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)

如何正确编写

1 个答案:

答案 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