第一:   不知道这些个key是在哪个文件中找到的???
<props>
<prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer"> net.paoding.analysis.analyzer.PaodingAnalyzer </prop>
<prop key="compass.engine.highlighter.default.formatter.simple.pre">
      <![CDATA[<font color="red"><b>]]>
</prop>
<prop key="compass.engine.highlighter.default.formatter.simple.post">
         <![CDATA[</b></font>]]>
</prop>
<prop key="compass.transaction.factory">
org.compass.spring.transaction.SpringSyncTransactionFactory
</prop>
</props>
第二:String sql = "select id,aclState&1,aclState&2,aclState&4,aclState&8,extendstate " +
"from acl where principalType = '"+principalType+"' and principalSn = "+principalSn;
return session.createSQLQuery(sql).list();Hibernate: 
    select
        id,
        aclState&1,
        aclState&2,
        aclState&4,
        aclState&8,
        extendstate 
    from
        acl 
    where
        principalType = '' 
        and principalSn = 0
22:22:30,504  WARN JDBCExceptionReporter:100 - SQL Error: 923, SQLState: 42000
22:22:30,504 ERROR JDBCExceptionReporter:101 - ORA-00923: 未找到要求的 FROM 关键字
22:22:30,508  WARN DefaultRemoter:67 - Method execution failed: 
org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute query; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:630)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:339)
at com.daoImp.DaoPopImp.GetAclRecordDao(DaoPopImp.java:257)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:81)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:242)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:163)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:108)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:556)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:401)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:242)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:267)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:245)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:260)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.hibernate.exception.SQLGrammarException: could not execute query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2235)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
at org.hibernate.loader.Loader.list(Loader.java:2124)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312)
at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1723)
at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165)
at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)
at com.daoImp.DaoPopImp$10.doInHibernate(DaoPopImp.java:265)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:419)
... 34 more

解决方案 »

  1.   

    aclState&1,
    aclState&2,
    aclState&4,
    aclState&8,
    这样的字段也能创建成功表? 
    principalType = ''  --是要判断principalType为空吧?
    principalType is null
      

  2.   

    &1 &是特殊转义符号,不能直接在SQL用
      

  3.   

    那是一条查询的SQl语句!  就是查询权限的时候  判断是否有CRUD(1248)的操作!  我就知道这么多.......等高手.....
      

  4.   

    你不用把&1, &2之类的弄到SQL语句当中,这个在oracle中是不认的。
      

  5.   


    --这个sql要是能执行,可真不简单
    select 1 dfd&1  from dual;
    --提示错误:没有指定的from位置select 1 dfd1  from dual;
    --可以正常执行,所以&号是特殊字符,不能用
      

  6.   

    "select id,aclState&1,aclState&2,aclState&4,aclState&8,extendstate " +
    "from acl where principalType = '"+principalType+"' and principalSn = "+principalSn;这条语句,我试过在Oracle11g里面是可以直接执行的,没有问题。
    但是在Hibernate程序里面用session.createSQLQuery(sql).list()解析就有问题,目前正在找解决方案,不知道哪位高手解决了。
      

  7.   

     解决你第二个问题:
    "select id,aclState&1,aclState&2,aclState&4,aclState&8,extendstate " +
    "from acl where principalType = '"+principalType+"' and principalSn = "+principalSn;
    oracle数据库总是出现错误。解决方案就是用oracle的函数bitand替换&就可以了:String sql = "select resourceSn,bitand(aclState,1), bitand(aclState,2), bitand(aclState,4), bitand(aclState,8), aclTriState "+ "from ACL where principalType = '" + principalType + "' and principalSn = " + principalSn;getSession().createSQLQuery(sql).list();