条件查询出错。不知为何。另一个例子模块能成功条件查询。这个就不行。
这个查询没问题:Hibernate: select * from (
  select sysmodule0_.MODULE_ID as MODULE1_2_, sysmodule0_.PARENT_ID as PARENT2_2_, sysmodule0_.MODULE_NAME as MODULE3_2_, sysmodule0_.MODULE_TYPE as MODULE4_2_, sysmodule0_.SHOW_TIPS as SHOW5_2_, sysmodule0_.OPERATE_URL as OPERATE6_2_, sysmodule0_.URL_CODE as URL7_2_, sysmodule0_.LEVEL_NO as LEVEL8_2_, sysmodule0_.USE_FLAG as USE9_2_, sysmodule0_.REMARK as REMARK2_ 
 from CSSPMAG.SYS_MODULE sysmodule0_ ) 
  where rownum <= ?
Hibernate: select count(*) as col_0_0_ from CSSPMAG.SYS_MODULE sysmodule0_
这个条件查询就有问题了:Hibernate: select * from (
  select sysmodule0_.MODULE_ID as MODULE1_2_, sysmodule0_.PARENT_ID as PARENT2_2_, sysmodule0_.MODULE_NAME as MODULE3_2_, sysmodule0_.MODULE_TYPE as MODULE4_2_, sysmodule0_.SHOW_TIPS as SHOW5_2_, sysmodule0_.OPERATE_URL as OPERATE6_2_, sysmodule0_.URL_CODE as URL7_2_, sysmodule0_.LEVEL_NO as LEVEL8_2_, sysmodule0_.USE_FLAG as USE9_2_, sysmodule0_.REMARK as REMARK2_ 
from CSSPMAG.SYS_MODULE sysmodule0_ 
where (1=1 )and(showTips like '%C%' ) ) where rownum <= ?
能插入、删掉、更新。
hbm.xml与数据库的映射是没有问题。
hbm.xml与bean类也相对应。没有问题。
为什么就不能条件查询呢?

解决方案 »

  1.   

    详细堆栈:
    - [org.hibernate.util.JDBCExceptionReporter] ORA-00904: "SHOWTIPS": 标识符无效- [com.trustel.cssp.phase1.bean.SysModule] 系统模块查询失败,原因:
    org.hibernate.exception.SQLGrammarException: could not execute query
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2108)
    at org.hibernate.loader.Loader.list(Loader.java:2103)
    at org.hibernate.hql.classic.QueryTranslatorImpl.list(QueryTranslatorImpl.java:912)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1122)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at com.trustel.service.CommonServiceImpl.query(CommonServiceImpl.java:442)
    at com.trustel.cssp.phase1.dao.realize.system.ModuleManagerDaoImpl.getModuleByCondition(ModuleManagerDaoImpl.java:116)
    at com.trustel.cssp.phase1.dao.realize.system.ModuleManagerDaoImpl$$FastClassByCGLIB$$39c6b029.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:695)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:630)
    at com.trustel.cssp.phase1.dao.realize.system.ModuleManagerDaoImpl$$EnhancerByCGLIB$$d352a064.getModuleByCondition(<generated>)
    at com.trustel.cssp.phase1.model.realize.system.ModuleManagerServiceImpl.getModuleByCondition(ModuleManagerServiceImpl.java:79)
    at com.trustel.cssp.phase1.action.system.SystemModuleAction.doQuery(SystemModuleAction.java:119)
    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 com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:404)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:267)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:229)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:167)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
    at com.trustel.cssp.phase1.interceptor.ParaInterceptor.intercept(ParaInterceptor.java:52)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
    at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
    at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3496)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
    Caused by: java.sql.SQLSyntaxErrorException: ORA-00904: "SHOWTIPS": 标识符无效 at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:91)
    at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:112)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:173)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:455)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:413)
    at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:1030)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:194)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:785)
    at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:860)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1186)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3381)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3425)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1490)
    at weblogic.jdbc.wrapper.PreparedStatement.executeQuery(PreparedStatement.java:128)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:187)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1791)
    at org.hibernate.loader.Loader.doQuery(Loader.java:674)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2217)
    ... 82 more
      

  2.   

    "SHOWTIPS": 标识符无效
    是不是字段写错了?
      

  3.   

    这是hbm.xml
    <?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 Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.trustel.cssp.phase1.bean.SysModule" table="SYS_MODULE" schema="CSSPMAG">
            <id name="moduleId" type="java.lang.String" access="field">
                <column name="MODULE_ID" length="20" />
                <generator class="com.trustel.id.IdGeneratorByDB" />
            </id>
            <property name="parentId" type="java.lang.String" access="field">
                <column name="PARENT_ID" length="20" not-null="true" />
            </property>
            <property name="moduleName" type="java.lang.String" access="field">
                <column name="MODULE_NAME" length="40" />
            </property>
            <property name="moduleType" type="java.lang.String" access="field">
                <column name="MODULE_TYPE" length="1" not-null="true" />
            </property>
            <property name="showTips" type="java.lang.String" access="field">
                <column name="SHOW_TIPS" length="32" not-null="true" />
            </property>
            <property name="operateUrl" type="java.lang.String" access="field">
                <column name="OPERATE_URL" length="256" not-null="true" />
            </property>
            <property name="urlCode" type="java.lang.String" access="field">
                <column name="URL_CODE" length="32" not-null="true" />
            </property>
            <property name="levelNo" type="java.lang.String" access="field">
                <column name="LEVEL_NO" length="4" />
            </property>
            <property name="useFlag" type="java.lang.String" access="field">
                <column name="USE_FLAG" length="1" not-null="true" />
            </property>
            <property name="re" type="java.lang.String" access="field">
                <column name="REMARK" length="100" />
            </property>
        </class>
    </hibernate-mapping>这是beanpackage com.trustel.cssp.phase1.bean;
    // default package/**
     * 系统模块信息
     * 
     */public class SysModule extends com.trustel.id.IdGeneratorByDB implements java.io.Serializable { private static final long serialVersionUID = -373690641221605590L;
     // Fields   
    public static final  String URl_ACCESS="U";//操作类别 moduleType 的值 URL访问
    public static final  String FORM_OPERATE="F";//操作类别 moduleType 的值 表单操作
    /**
     * 模块ID
     */
    public String moduleId;
    /**
     * 父模块ID
     */
         public String parentId;
         /**
          * 模块或操作名称
          */
         public String moduleName;
         /**
          * 显示内容(模块或 操作代号 )
          */
         public String showTips;
         /**
          * 层次号 
          */
         public String levelNo;
         /**
          * 模块类别或操作类别
          */
         public String moduleType;
         /**
          * 模块或操作首页面
          */
         public String operateUrl;
         /**
          * URL简码
          */
         public String urlCode;
         /**
          *  使用状态,'Y:有效 ; N:无效';
          */
         public String useFlag;
         /**
          * 备注
          */
         public String re;
        // Constructors    public SysModule(String moduleId, String parentId, String moduleName, String showTips, String levelNo, String moduleType, String operateUrl, String urlCode, String useFlag, String re) {
    super();
    this.moduleId = moduleId;
    this.parentId = parentId;
    this.moduleName = moduleName;
    this.showTips = showTips;
    this.levelNo = levelNo;
    this.moduleType = moduleType;
    this.operateUrl = operateUrl;
    this.urlCode = urlCode;
    this.useFlag = useFlag;
    this.re = re;
    } /** default constructor */
        public SysModule() {
        } /** minimal constructor */
        public SysModule(String moduleId) {
            this.moduleId = moduleId;
        }
        
    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((moduleId == null) ? 0 : moduleId.hashCode());
    return result;
    } @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    final SysModule other = (SysModule) obj;
    if (moduleId == null) {
    if (other.moduleId != null)
    return false;
    } else if (!moduleId.equals(other.moduleId))
    return false;
    return true;
    }}
    这是表:
    -- Create table
    create table SYS_MODULE
    (
      MODULE_ID   VARCHAR2(20 CHAR) not null,
      PARENT_ID   VARCHAR2(20 CHAR) not null,
      MODULE_NAME VARCHAR2(40 CHAR),
      MODULE_TYPE CHAR(1) not null,
      SHOW_TIPS   VARCHAR2(32 CHAR) not null,
      OPERATE_URL VARCHAR2(256 CHAR) not null,
      URL_CODE    VARCHAR2(32 CHAR) not null,
      LEVEL_NO    VARCHAR2(4 CHAR),
      USE_FLAG    CHAR(1) not null,
      REMARK      VARCHAR2(100 CHAR)
    )
    tablespace CSSP_MAIN
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64
        minextents 1
        maxextents unlimited
      );
    -- Add comments to the table 
    comment on table SYS_MODULE
      is '系统功能模块信息';
    -- Add comments to the columns 
    comment on column SYS_MODULE.MODULE_ID
      is '操作编号';
    comment on column SYS_MODULE.PARENT_ID
      is '父级操作编号';
    comment on column SYS_MODULE.MODULE_NAME
      is '操作名称';
    comment on column SYS_MODULE.MODULE_TYPE
      is '操作类别';
    comment on column SYS_MODULE.SHOW_TIPS
      is '显示内容';
    comment on column SYS_MODULE.OPERATE_URL
      is '操作内容';
    comment on column SYS_MODULE.URL_CODE
      is 'URL简码';
    comment on column SYS_MODULE.LEVEL_NO
      is '层次号';
    comment on column SYS_MODULE.USE_FLAG
      is '使用状态';
    comment on column SYS_MODULE.REMARK
      is '备注';
    -- Create/Recreate primary, unique and foreign key constraints 
    alter table SYS_MODULE
      add constraint PK_SYS_MODULE primary key (MODULE_ID)
      using index 
      tablespace CSSP_MAIN
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );
    -- Create/Recreate indexes 
    create index IDX_SYSTEMMODULE_MODULE_NAME on SYS_MODULE (MODULE_NAME)
      tablespace CSSP_INDEX
      pctfree 30
      initrans 2
      maxtrans 255
      storage
      (
        initial 16K
        minextents 1
        maxextents unlimited
      );我再三检查,不是字段写错了。
      

  4.   


    Hibernate: select * from (
      select sysmodule0_.MODULE_ID as MODULE1_2_, sysmodule0_.PARENT_ID as PARENT2_2_, sysmodule0_.MODULE_NAME as MODULE3_2_, sysmodule0_.MODULE_TYPE as MODULE4_2_, sysmodule0_.SHOW_TIPS as SHOW5_2_, sysmodule0_.OPERATE_URL as OPERATE6_2_, sysmodule0_.URL_CODE as URL7_2_, sysmodule0_.LEVEL_NO as LEVEL8_2_, sysmodule0_.USE_FLAG as USE9_2_, sysmodule0_.REMARK as REMARK2_ 
    from CSSPMAG.SYS_MODULE sysmodule0_ 
    where (1=1 )and(showTips like '%C%' ) ) where rownum <= ?showTips怎么能在这里用呢?你是想用bean匹配的方式将这个参数值传进来吗?
    为虾米不用“SHOW_TIPS”这个呢?
      

  5.   


    问题解决了。
    是这样的,使用 ojdbc14-9.2.0.5.jar。
    在查询语句 from SysModule 后面加个别名,如,from SysModule t,
    而条件 where 后,就 t.showTips 连 select count(*) from SysModule 这个后面也要加别名 ,弄成 select count(*) from SysModule t 
    搞成这样才不出错。
    具体原因、还没搞清。
      

  6.   

    嗯,不好意思,使用ojdbc14的版本是
    Manifest-Version: 1.0
    Specification-Title:    Oracle JDBC driver classes for use with JDK14
    Sealed: true
    Created-By: 1.4.2_08 (Sun Microsystems Inc.)
    Implementation-Title:   ojdbc14.jar
    Specification-Vendor:   Oracle Corporation
    Specification-Version:  Oracle JDBC Driver version - "10.2.0.1.0"
    Implementation-Version: Oracle JDBC Driver version - "10.2.0.1.0"
    Implementation-Vendor:  Oracle Corporation
    Implementation-Time:    Wed Jun 22 11:19:45 2005Name: oracle/sql/converter/
    Sealed: falseName: oracle/sql/
    Sealed: falseName: oracle/sql/converter_xcharset/
    Sealed: false