简体   繁体   English

在休眠返回的令牌未知时使用内部联接

[英]Using inner join on hibernate returning token uknown

I'm having some trouble with hibernate. 我在休眠时遇到了一些麻烦。 I'm trying to create a query to return the number of consults foreach medical ward, i just run the sql on pgAdmin and everything was well, but when i tried to create the same sql on hibernate, this has return some erros. 我试图创建一个查询以返回每个医疗病房的咨询次数,我只是在pgAdmin上运行sql,一切都很好,但是当我尝试在休眠状态下创建相同的sql时,这返回了一些错误。 Here the code. 这里的代码。

SQL: SQL:

select a.cod_ala ,count(cod_consulta) as max from Consulta as c 
    inner join Medico as m on m.cod_medico = c.cod_medico
    inner join Ala as a on a.cod_ala = m.cod_ala
group by a.cod_ala  

Java: Java的:

public void getConsultasAla() {
    String sql = "select a.cod_ala, count(cod_consulta) as max from Consulta as c" 
    +" inner join Medico as m on m.cod_medico = c.cod_medico"           
    +" inner join Ala as a on a.cod_ala = m.cod_ala"
    +" group by a.cod_ala";



    Query query;
    System.out.println(sql);
    this.session = GeneralController.getSession();

    query = this.session.createQuery(sql);
    List list = query.list();
    int i = 0;
    while(list.iterator().hasNext()) {
        System.out.println(list.get(i++));
    }

}

Errors: 错误:

jul 01, 2015 8:43:14 PM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: line 1:149: unexpected token: on
jul 01, 2015 8:43:14 PM org.hibernate.hql.internal.ast.ErrorCounter reportError
ERROR: line 1:149: unexpected token: on
line 1:149: unexpected token: on
    at org.hibernate.hql.internal.antlr.HqlBaseParser.fromJoin(HqlBaseParser.java:1694)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1349)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1055)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:701)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:294)
    at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:157)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:266)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1778)
    at org.hibernate.control.ConsultsController.getConsultasAla(ConsultsController.java:473)
    at org.menu.MenuConsulta.MenuConsultas(MenuConsulta.java:97)
    at org.hibernate.MainApp.menuPrincipal(MainApp.java:80)
    at org.hibernate.MainApp.main(MainApp.java:145)

Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: on near line 1, column 98 [select a.cod_ala, count(cod_consulta) as max from org.model.Consulta as c inner join Medico as m on m.cod_medico = c.cod_medico inner join Ala as a on a.cod_ala = m.cod_ala group by a.cod_ala]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:79)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:276)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:180)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:105)
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:168)
    at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:221)
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:199)
    at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1778)
    at org.hibernate.control.ConsultsController.getConsultasAla(ConsultsController.java:473)
    at org.menu.MenuConsulta.MenuConsultas(MenuConsulta.java:97)
    at org.hibernate.MainApp.menuPrincipal(MainApp.java:80)
    at org.hibernate.MainApp.main(MainApp.java:145)

PS: Sorry for bad grammar, english is my second language PS:对不起,语法不好,英语是我的第二语言

There is no "on" inner join in hibernate; 休眠中没有“ on”内部连接; you use entity and not the actual table in hibernate.joins can only be done between associated entities 您使用实体而不是hibernate.join中的实际表只能在关联的实体之间完成

example: 例:

select u from User u inner join u.name name where.. 

The on clause is unnecessary, because Hibernate knows from the mapping of the association(ie OneToOne/ManyToOne etc). on子句是不必要的,因为Hibernate从关联的映射(即OneToOne / ManyToOne等)中知道。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM