簡體   English   中英

在休眠返回的令牌未知時使用內部聯接

[英]Using inner join on hibernate returning token uknown

我在休眠時遇到了一些麻煩。 我試圖創建一個查詢以返回每個醫療病房的咨詢次數,我只是在pgAdmin上運行sql,一切都很好,但是當我嘗試在休眠狀態下創建相同的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的:

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++));
    }

}

錯誤:

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:對不起,語法不好,英語是我的第二語言

休眠中沒有“ on”內部連接; 您使用實體而不是hibernate.join中的實際表只能在關聯的實體之間完成

例:

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

on子句是不必要的,因為Hibernate從關聯的映射(即OneToOne / ManyToOne等)中知道。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM