TOMCAT_SQL="select a.username as username,a.password as password from operator as a";
WEBLOGIC_SQL="select * from (select a.username as username,a.password as password from operator as a) as foo";我的本机开发环境是XP+TOMCAT+SSH这样
服务器是sercer2003 + weblogic 11g +
数据库:mysql5.5使用的是他那个一个数据库在server2003上开发框架是SSH其中有几个方法使用的SQL语句查询在tomcat下可以正常通过但是到了weblogic里面就不行了.必须在外面套上select * from () as foo 才可以我不知道这个是为什么,为什么需要在使用weblogic的时候加上这么一个东西,是我的框架搭建哪里有问题还是环境问题,还是hibernate的问题.不太明白了.
WEBLOGIC_SQL="select * from (select a.username as username,a.password as password from operator as a) as foo";我的本机开发环境是XP+TOMCAT+SSH这样
服务器是sercer2003 + weblogic 11g +
数据库:mysql5.5使用的是他那个一个数据库在server2003上开发框架是SSH其中有几个方法使用的SQL语句查询在tomcat下可以正常通过但是到了weblogic里面就不行了.必须在外面套上select * from () as foo 才可以我不知道这个是为什么,为什么需要在使用weblogic的时候加上这么一个东西,是我的框架搭建哪里有问题还是环境问题,还是hibernate的问题.不太明白了.
"select a.username as username,a.password as password from operator as a";
可以改为
"select a.username,a.password from operator a";
2012-11-28 14:41:33 [org.apache.struts2.dispatcher.Dispatcher]-[INFO] - WebLogic server detected. Enabling Struts parameter access work-around.
2012-11-28 14:41:50 [com.ygbl.framework.orm.SqlColumnToBean]-[DEBUG] - fields =[Ljava.lang.reflect.Field;@1b933cb
2012-11-28 14:41:50 [com.ygbl.framework.orm.SqlColumnToBean]-[DEBUG] - field =treasId
2012-11-28 14:41:50 [com.ygbl.framework.orm.SqlColumnToBean]-[DEBUG] - field =password
2012-11-28 14:41:50 [com.ygbl.framework.orm.SqlColumnToBean]-[DEBUG] - field =username
2012-11-28 14:41:50 [com.ygbl.framework.orm.SqlColumnToBean]-[DEBUG] - field =realname
2012-11-28 14:41:50 [com.ygbl.framework.orm.SqlColumnToBean]-[DEBUG] - field =mobile
2012-11-28 14:41:50 [com.ygbl.framework.orm.SqlColumnToBean]-[DEBUG] - field =email
2012-11-28 14:41:50 [com.ygbl.framework.orm.SqlColumnToBean]-[DEBUG] - field =status
2012-11-28 14:41:50 [com.ygbl.framework.orm.SqlColumnToBean]-[DEBUG] - field =type
2012-11-28 14:41:50 [com.ygbl.framework.orm.SqlColumnToBean]-[DEBUG] - field =success
2012-11-28 14:41:50 [org.hibernate.type.TextType]-[INFO] - could not read column value from result set: OPER_USERNAME; Column 'OPER_USERNAME' not found.
2012-11-28 14:41:50 [org.hibernate.util.JDBCExceptionReporter]-[WARN] - SQL Error: 0, SQLState: S0022
2012-11-28 14:41:50 [org.hibernate.util.JDBCExceptionReporter]-[ERROR] - Column 'OPER_USERNAME' not found.
2012-11-28 14:42:41 [com.opensymphony.xwork2.config.ConfigurationManager]-[INFO] - Detected container provider Struts XML configuration provider (struts.xml) needs to be reloaded. Reloading all providers.
2012-11-28 14:42:41 [com.opensymphony.xwork2.config.providers.XmlConfigurationProvider]-[INFO] - Parsing configuration file [struts-default.xml]
2012-11-28 14:42:42 [com.opensymphony.xwork2.config.providers.XmlConfigurationProvider]-[INFO] - Parsing configuration file [struts-plugin.xml]
2012-11-28 14:42:42 [com.opensymphony.xwork2.config.providers.XmlConfigurationProvider]-[INFO] - Parsing configuration file [struts.xml]
2012-11-28 14:42:42 [org.apache.struts2.config.BeanSelectionProvider]-[INFO] - Loading global messages from globalMessage
2012-11-28 14:42:42 [org.apache.struts2.spring.StrutsSpringObjectFactory]-[INFO] - Initializing Struts-Spring integration...
2012-11-28 14:42:42 [com.opensymphony.xwork2.spring.SpringObjectFactory]-[INFO] - Setting autowire strategy to name
2012-11-28 14:42:42 [org.apache.struts2.spring.StrutsSpringObjectFactory]-[INFO] - ... initialized Struts-Spring integration successfully
2012-11-28 14:42:42 [org.springframework.web.context.support.XmlWebApplicationContext]-[INFO] - Closing Root WebApplicationContext: startup date [Wed Nov 28 14:41:18 CST 2012]; root of context hierarchy
2012-11-28 14:42:43 [org.springframework.beans.factory.support.DefaultListableBeanFactory]-[INFO] - Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@19e14af: defining beans [fileUploadActionId,loginInterceptor,randomNumActionId,baseService,baseSmsService,sessionService,genericDao,genericSmsDao,rsctb,forwardingActionId,staticFreeerId,treasurerService,treasurerActionId,speciallistService,smsService,smsDao,schedularProcessor,customStoredCardActionId,scardActionId,scardService,reserveActionId,reserveService,registerService,RegisterActionId,regionService,RegionActionId,recommendActionId,recommendService,promoteActionId,promoteService,pmsActionId,pmsAttachActionId,pmsService,payActionId,payService,CTIActionId,operatorActionId,operatorPageActionId,operatorSmsActionId,operatorService,mailService,joinUserActionId,joinUserUpActionId,joinUserService,hospitalService,getPasswordService,examineActionId,orderCashActionId,PayCashActionId,examineService,orderCashService,payCashService,doctorService,DoctorActionId,DoctorAddActionId,doctorLoginAction,doctorPageActionId,customAccountActionId,customActionId,customLoginActionId,customReserveActionId,customUpdateActionId,accountService,customService,cdrService,CdrActionId,CdrPageActionId,bankActionId,cashDetailActionId,withdrawCashActionId,cashService,bulletinService,BulletinActionId,bulletionPageActionId,bonusActionId,bonusService,announcementQueryId,announcementService,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,propertyConfigurer,dataSource,sessionFactory,transactionManager,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,com.ygbl.framework.service.SpringContext#0,org.springframework.scheduling.annotation.internalAsyncAnnotationProcessor,org.springframework.scheduling.annotation.internalScheduledAnnotationProcessor]; root of factory hierarchy
2012-11-28 14:42:43 [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean]-[INFO] - Closing Hibernate SessionFactory
2012-11-28 14:42:43 [org.hibernate.impl.SessionFactoryImpl]-[INFO] - closing
没有什么是不必要的.我给的SQL是示意并非真实的SQL
数据库列名为如:OPER_USERNAME我的实体接收的时候直接就是username啦
这样么写方便操作.
而且有没有别名应该不会对这个有影响.
别名都是有的.但是在weblogic上就是不好使不知道为什么
楼主给的sql是伪代码?
是的.是伪的.我现在贴出来完整的吧.
不好意思啊tomcat下的SQL
String TOMCAT_SQL="select oper.OPER_USERNAME as username,oper.OPER_PASSWORD as password,oper.OPER_REALNAME as realname,4 as type from operator as oper where oper.OPER_STATUS=1 and oper.oper_username =?";
Weblogic上可以执行这个
String weblogic_SQL="select * from (select oper.OPER_USERNAME as username,oper.OPER_PASSWORD as password,oper.OPER_REALNAME as realname,4 as type from operator as oper where oper.OPER_STATUS=1 and oper.oper_username =?) as ooo";
表结构
CREATE TABLE `operator` (
`OPERATOR_ID` int(11) NOT NULL AUTO_INCREMENT,
`OPERATOR_NO` varchar(100) DEFAULT '' COMMENT '工号',
`OPER_USERNAME` varchar(100) DEFAULT '' COMMENT '用户名',
`OPER_PASSWORD` varchar(100) DEFAULT '' COMMENT '密码',
`OPER_POWER` varchar(255) DEFAULT '' COMMENT '权限',
`OPER_MOBILE` varchar(20) DEFAULT '' COMMENT '手机',
`OPER_EMAIL` varchar(255) DEFAULT '' COMMENT '邮箱',
`OPER_REALNAME` varchar(100) DEFAULT '' COMMENT '真实姓名',
`OPER_CREATETIME` datetime DEFAULT NULL COMMENT '创建时间',
`OPER_STATUS` int(11) DEFAULT NULL COMMENT '状态:1启用,2冻结,3作废',
`OPER_OTHER` text COMMENT '其他信息',
PRIMARY KEY (`OPERATOR_ID`),
KEY `OPERATOR_NO` (`OPERATOR_NO`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COMMENT='接线员';
数据库映射
@Entity
@Table(name = "operator",uniqueConstraints = @UniqueConstraint(columnNames = "OPERATOR_NO"))
public class Operator implements java.io.Serializable { // Fields private int operatorId;
private String operatorNo;
private String operUsername;
private String operPassword;
private String operPower;
private String operMobile;
private String operEmail;
private String operRealname;
private Date operCreatetime;
private Integer operStatus;
private String operOther; // Constructors /** default constructor */
public Operator() {
} /** full constructor */
public Operator(String operatorNo, String operUsername,
String operPassword, String operPower, String operMobile,
String operEmail, String operRealname, Date operCreatetime,
Integer operStatus, String operOther) {
this.operatorNo = operatorNo;
this.operUsername = operUsername;
this.operPassword = operPassword;
this.operPower = operPower;
this.operMobile = operMobile;
this.operEmail = operEmail;
this.operRealname = operRealname;
this.operCreatetime = operCreatetime;
this.operStatus = operStatus;
this.operOther = operOther;
} // Property accessors
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "OPERATOR_ID", unique = true, nullable = false)
public int getOperatorId() {
return this.operatorId;
} public void setOperatorId(int operatorId) {
this.operatorId = operatorId;
} @Column(name = "OPERATOR_NO", unique = true, length = 100)
public String getOperatorNo() {
return this.operatorNo;
} public void setOperatorNo(String operatorNo) {
this.operatorNo = operatorNo;
} @Column(name = "OPER_USERNAME", length = 100)
public String getOperUsername() {
return this.operUsername;
} public void setOperUsername(String operUsername) {
this.operUsername = operUsername;
} @Column(name = "OPER_PASSWORD")
public String getOperPassword() {
return this.operPassword;
} public void setOperPassword(String operPassword) {
this.operPassword = operPassword;
} @Column(name = "OPER_POWER")
public String getOperPower() {
return this.operPower;
} public void setOperPower(String operPower) {
this.operPower = operPower;
} @Column(name = "OPER_MOBILE", length = 20)
public String getOperMobile() {
return this.operMobile;
} public void setOperMobile(String operMobile) {
this.operMobile = operMobile;
} @Column(name = "OPER_EMAIL")
public String getOperEmail() {
return this.operEmail;
} public void setOperEmail(String operEmail) {
this.operEmail = operEmail;
} @Column(name = "OPER_REALNAME", length = 100)
public String getOperRealname() {
return this.operRealname;
} public void setOperRealname(String operRealname) {
this.operRealname = operRealname;
} @Temporal(TemporalType.TIMESTAMP)
@Column(name = "OPER_CREATETIME", length = 0)
public Date getOperCreatetime() {
return this.operCreatetime;
} public void setOperCreatetime(Date operCreatetime) {
this.operCreatetime = operCreatetime;
} @Column(name = "OPER_STATUS")
public Integer getOperStatus() {
return this.operStatus;
} public void setOperStatus(Integer operStatus) {
this.operStatus = operStatus;
} @Column(name = "OPER_OTHER")
public String getOperOther() {
return this.operOther;
} public void setOperOther(String operOther) {
this.operOther = operOther;
}}
4 as type 是什么?
type直接返回4,因为不想在代码里面手动给予4
赋值的问题?我不太了解weblogic的运行模式因为这个sql在数据中执行是没有任何错误的.通过我的这次感觉应该是weblogic会预编译一次,这个sql根本都没有走到数据库那个层面因为能到数据库执行的话肯定是可以的.或者会不会跟hibernate有关系呢?如果和hibernate有关系的话,为嘛在tomcat下是可以的呢?如果有包冲突会出现这样诡异的错误码?
让weblogic执行一些简单的sql试过了可以吗?
比如
select * from xxxTable
select oper.username as usernmae from operator有as username
的过不去/
hibernate没执行起来那weblogic的sql是怎么执行的?自己写的jdbc?
hibernate的show_sql 配置之后控制台能看到这个语句
后面会紧跟着
could not read column value from result set: OPER_USERNAME; Column 'OPER_USERNAME' not found.
然后在tomcat执行的话,也是打印了相同的sql语句,只是不报错?
现在因为有对比,也有办法,分别执行两种方式,跟踪各自的TOMCAT_SQL,WEBLOGIC_SQL,往hibernate底层跟进,跟到不能跟为止,看各自传进去的有何不同。理论上都是hibernate执行的sql,执行结果不同,hibernate接受的输入也应该不同。还有两者的hibernate相关配置有没有差异呢
hibernate的配置都是一样的唯一不一样的是SQL使用SQL就是不行
如果用的是HQL就可以...我先跟踪hibernate看看吧好恶心的问题啊不一样只是tomcat和weblogic呀
这里sql执行引擎假定为唯一的hibernate。那就说明当各自使用sql时,两者传给sql执行引擎的输入是不同的(推测送给hibernate之前各自有各自的预处理),都使用hql时是相同的。
关键尽量看下sql都送到哪了