select count(e.Id) from Books e (where e.bokState=1)

解决方案 »

  1.   

    select count(e.Id) from Books e where e.bokState=1
    是用hql语句吧?把括号去掉。
      

  2.   

    hql 这个语句会报错 有括号和没括号是一样的
      

  3.   

    <Error in named query: Avaibookcount>
    org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ( near line 3, column 61 [
      
       select count(e.Id) from com.ssjx.bbms.model.Books e (where e.bokState=1)
      
      ]
    at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
    at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:244)
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:155)
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
    at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:364)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:328)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1176)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:825)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:751)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1091)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:396)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:145)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:277)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:313)
    at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:139)
    at org.springframework.web.struts.ContextLoaderPlugIn.createWebApplicationContext(ContextLoaderPlugIn.java:353)
    at org.springframework.web.struts.ContextLoaderPlugIn.initWebApplicationContext(ContextLoaderPlugIn.java:296)
    at org.springframework.web.struts.ContextLoaderPlugIn.init(ContextLoaderPlugIn.java:225)
    at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:839)
    at org.apache.struts.action.ActionServlet.init(ActionServlet.java:332)
    at javax.servlet.GenericServlet.init(GenericServlet.java:211)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1029)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:862)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4013)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4357)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3043)
    at org.apache.catalina.core.StandardContext.backgroundProcess(StandardContext.java:4658)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1619)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1628)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1628)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1608)
    at java.lang.Thread.run(Unknown Source)
    Caused by: line 3:61: unexpected token: (
    at org.hibernate.hql.antlr.HqlBaseParser.fromClassOrOuterQueryPath(HqlBaseParser.java:1938)
    at org.hibernate.hql.antlr.HqlBaseParser.fromRange(HqlBaseParser.java:1564)
    at org.hibernate.hql.antlr.HqlBaseParser.fromClause(HqlBaseParser.java:1408)
    at org.hibernate.hql.antlr.HqlBaseParser.selectFrom(HqlBaseParser.java:1130)
    at org.hibernate.hql.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:702)
    at org.hibernate.hql.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:296)
    at org.hibernate.hql.antlr.HqlBaseParser.statement(HqlBaseParser.java:159)
    at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:238)
    ... 34 more
      

  4.   

    在Hql里面from后面,也就是你的Books这个是对象名,并不是数据库里的表名,bokState是属性名,也是就其对应的字段
    在你的hbm.xml里类似这样的定义
    <class name="cn.com.Books" table="BOOKS">
    <id name="id" column="ID" unsaved-value="null">
         <generator class="native">
    </generator>
    </id>
    <property name="bokState" column="BOKSTATE" length="20"></property>
    </class>
    然后你的HQL就可以这样写了
    select count(e.Id) from Books e where e.bokState=1
    如果还有问题,可能就是你的hbm.xml文件没有加载上了
      

  5.   

    Books就是类名 bokState是类中的属性 
    这个hql我是加在 books.hbm.xml中的
    <query name="Avaibookcount">
       <![CDATA[
       select count(e.Id) from Books e where e.bokState=1
       ]]>
     </query>
    <query name="selectAvaiBookAsPage">
       <![CDATA[
       from Books where bokState=1
       ]]>
    </query>
    然后
    query = session.getNamedQuery(Avaibookcount);
    之后就报那个错,也就是说映射已经加载了
      

  6.   

    .....
    这里的query是直接的sql语句啊,不用HQL语句的。
    select count(id) from Books where bokstate=1   //id,bokstate跟数据库里的列名对应
      

  7.   

    你写到books.hbm.xml这里这样定义当然是直接的sql了,以为你写的服务层呢,你用的什么架构呀
      

  8.   

    我知道了,谢谢两位 
    struts + hibernate +spring