public Book[] getBooks() {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
String hql = "select b from Book as b order by b.author, b.title";
List list = session.createQuery(hql).list();
tx.commit();
return (Book[]) list.toArray(new Book[0]);
}下面报错了,给为大大帮帮忙,
严重: Servlet.service() for servlet action threw exception
java.sql.SQLException: ORA-00933: SQL 命令未正确结束 at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1451)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteDescribe(TTC7Protocol.java:651)
at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2117)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2331)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:422)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:366)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)
at org.hibernate.loader.Loader.doQuery(Loader.java:662)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at dao.Impl.BookDao.getBooks(BookDao.java:46)
at struts.action.BookListAction.execute(BookListAction.java:36)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at util.EncodingFilter.doFilter(EncodingFilter.java:36)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)

解决方案 »

  1.   

      不行  以前是用sql server 现在我改了orcale  是不是这里面的问题啊!
      

  2.   

    select b from Book as b order by b.author, b.title把 as 去掉select b from Book b order by b.author, b.title
      

  3.   

    select b from Book as b order by b.author, b.title这个看着挺别扭的、语句有问题吧。
      

  4.   

    在pl/sql里面说sql命令未正确结束。
      

  5.   

    语句上看是没什么问题的,只能一点一点的来调试了,先按照一个字段order by 看是否出问题,如果不出问题就应该是多字段排序的问题了。
      

  6.   

     select * from ... 
      

  7.   

     from Book as b order by b.author, b.title这样试试
      

  8.   

    select b from Book as b order by b.author, b.title这个语句有语病有两个b,而且  在oracle中 不用as   select b from Book  order by anthor,title  这样叫就可以了啊 
      

  9.   

    会不会是我换了数据库hibernate 找不到表对象了
      

  10.   

    严重: Servlet.service() for servlet action threw exception
    java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.IdentNode 
     \-[IDENT] IdentNode: 'b' {originalText=b} at org.hibernate.hql.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:140)
    at org.hibernate.hql.ast.HqlSqlWalker.useSelectClause(HqlSqlWalker.java:702)
    at org.hibernate.hql.ast.HqlSqlWalker.processQuery(HqlSqlWalker.java:531)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:645)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
    at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
    at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:218)
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
    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.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
    at dao.Impl.BookDao.getBooks(BookDao.java:46)
    at struts.action.BookListAction.execute(BookListAction.java:36)
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at util.EncodingFilter.doFilter(EncodingFilter.java:36)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
    还不行。。抓心挠肝。
      

  11.   

    hql 应该写成“from Book as b order by b.author, b.title”
      

  12.   

    如果你怀疑hql语句写错了,可以用hql editor 进行调试啊
      

  13.   

    from Book  order by author,title
    这样试试
    另外,把hibernate的show_sql设成true,log登记设为debug,看hql翻译成的sql对不对
      

  14.   

    在你配置文件里
    把hibernate的show_sql设成true
    然后看后台打印出来的sql
    在你数据库里执行一下,看到底是什么错造成的
      

  15.   

    不对  除了HQL 会不会有别的原因啊   有没有人能看明白下面错误都写的是一些什么啊!
      

  16.   

    from Book
    就用这句,看看行不行,再不行就不是hql的问题了,就要检查Book的配置对不对了
      

  17.   

    我来总结一下大家的结果
    5#  B标识符无效
    13#  命令未正确结束
    14#  anthor无效
    18#  命令为正确结束
    22#  在数据库中select * from Book order by author,title好使,
          不过在项目里依然是同样的错误。
    23@  我才疏学浅不知道什么叫去后台打印sql 至于hibernate.hbm.xml在影射的时候就改好了从上面这些问题分析,会不会是我少了某个包,或者数据库连接的时候出了问题,我看过了好像没什么问题。
      

  18.   

    create table customer(id int primary key,
                    firstname varchar(255),
                    lastname varchar(255),
                    age int)create table book(id int primary key,
                 title varchar(255),
                 author varchar(255),
                 customer_fk int foreign key references customer(id),
                 borrowallowed int)insert into customer values(1,'aa','bb',20)
    insert into book values(1,'XXX','tom',1,0)
    两个表,两条记录其中 borrowallowed int  本来是bit类型的 oracle里面没有Bit 我就改int类型了
      

  19.   

    你用的是createQuery()这个方法,这个方法是hql语句,应该是“from Book ...”,如果按照你写的代码,把createQuery()换成createHQLQuery()试试。(createHQLQuery中HQL的大小写我不记得了,你自己验证哈)
      

  20.   

    我能不能问问什么是后台打印出sql?
      

  21.   

    在是在hibernate的配置文件中,把show_sql设成true,这样你程序运行时,后台会打印出执行的SQL语句
      

  22.   

    控制台打印sql,你那个问题应该好解决,给你个思路,看hibernate配置文件,肯定是配置文件错误,你是不是加了一个参数,除了show_sql,format_sql  的另一个参数?如果是就对了!
      

  23.   

    cache.use_query_cache=true这个东西应该删掉吗!  除了show_sql=true  就剩这个了
      

  24.   

    晕倒了,Hql 语句是那么写吗?那是sql 语句吧!
      

  25.   

    把Book的.hbm文件贴上来,hibernate配置文件贴上来
      

  26.   

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- 
        Mapping file autogenerated by MyEclipse - Hibernate Tools
    -->
    <hibernate-mapping>
        <class name="po.Book" table="book" schema="dbo" catalog="qwe">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="increment" />
            </id>
            <many-to-one name="customer" class="po.Customer" fetch="select">
                <column name="customer_fk" />
            </many-to-one>
            <property name="title" type="java.lang.String">
                <column name="title" />
            </property>
            <property name="author" type="java.lang.String">
                <column name="author" />
            </property>
            <property name="borrowallowed" type="java.lang.Boolean">
                <column name="borrowallowed" />
            </property>
        </class>
    </hibernate-mapping>
      book.hbm.xml
      

  27.   

    Hibernate.hbm.xml<?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration><session-factory>
    <property name="show_sql">true</property>
    <property name="myeclipse.connection.profile">qwe</property>
    <property name="connection.url">
    jdbc:oracle:thin:@10.19.68.18:1521:orcl
    </property>
    <property name="connection.username">qwe</property>
    <property name="connection.password">qwe</property>
    <property name="connection.driver_class">
    oracle.jdbc.driver.OracleDriver
    </property>
    <property name="dialect">
    org.hibernate.dialect.OracleDialect
    </property>
    <mapping resource="po/Customer.hbm.xml" />
    <mapping resource="po/Book.hbm.xml" /></session-factory></hibernate-configuration>
      

  28.   

    把用 from Book的错误贴出来看看
      

  29.   

    楼主,建议你先从最简单的语句开始测试,首先你先确定你的hibernate这边的功能是正确的,建议先用
    fron Book试试,如果不行那就不是你的HQL语句问题,那就是你的配置问题,然后再向上排查
      

  30.   

    建议你先确定hibernate运行正常,也就是说先做一最简单的查询语句,如果没问题,再继续。建议把beginTransaction和commit取消试试。