求解:[org.hibernate.util.JDBCExceptionReporter] ORA-00904: "SHOWTIPS": 标识符无效

丰太君 2010-12-06 10:46:52
条件查询出错。不知为何。另一个例子模块能成功条件查询。这个就不行。
这个查询没问题:

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类也相对应。没有问题。
为什么就不能条件查询呢?
...全文
1350 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxyzxq2008 2010-12-06
  • 打赏
  • 举报
回复

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”这个呢?

丰太君 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhuomingwang 的回复:]
"SHOWTIPS": 标识符无效
是不是字段写错了?
[/Quote]这是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="remark" type="java.lang.String" access="field">
<column name="REMARK" length="100" />
</property>
</class>
</hibernate-mapping>

这是bean
package 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 remark;


// Constructors

public SysModule(String moduleId, String parentId, String moduleName, String showTips, String levelNo, String moduleType, String operateUrl, String urlCode, String useFlag, String remark) {
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.remark = remark;
}

/** 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
);

我再三检查,不是字段写错了。
  • 打赏
  • 举报
回复
"SHOWTIPS": 标识符无效
是不是字段写错了?
丰太君 2010-12-06
  • 打赏
  • 举报
回复
详细堆栈:

- [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
丰太君 2010-12-06
  • 打赏
  • 举报
回复
嗯,不好意思,使用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 2005

Name: oracle/sql/converter/
Sealed: false

Name: oracle/sql/
Sealed: false

Name: oracle/sql/converter_xcharset/
Sealed: false
丰太君 2010-12-06
  • 打赏
  • 举报
回复
这里,送分给大家了
丰太君 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lxyzxq2008 的回复:]
SQL code

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_,……
[/Quote]

问题解决了。
是这样的,使用 ojdbc14-9.2.0.5.jar。
在查询语句 from SysModule 后面加个别名,如,from SysModule t,
而条件 where 后,就 t.showTips

连 
select count(*) from SysModule 
这个后面也要加别名 ,弄成 
select count(*) from SysModule t 

搞成这样才不出错。
具体原因、还没搞清。

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧