有关STRUTS+HIBERNATE+TOMCAT一个很奇怪的问题

josejose 2007-04-19 04:56:05
有关STRUTS+HIBERNATE+TOMCAT的一个问题,

请问ACTION类在TOMCAT下经过编译后,是不是会生成一个叫CxAction.java 的文件?
是的话,以下就是一个很奇怪的问题了:

我按网上的一个小教程做了个STRUTS+HIBERNATE的例子
运行WEB报错
HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: could not insert: [com.hitt2.Hibernate.Userlist]
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

org.hibernate.exception.ConstraintViolationException: could not insert: [com.hitt2.Hibernate.Userlist]
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1986)
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2405)
org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:37)
org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)
org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
com.hitt2.struts.action.AdduserAction.execute(AdduserAction.java:49)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.0.28 logs.


--------------------------------------------------------------------------------

Apache Tomcat/5.0.28

我看到其中一个是INSERT错误,我想应该是操作数据库的时候出错。查了一下ACTION类,没什么明显的错误,
我就根据抱错想找对应的SERVLET看看,TOMCAT对应工程下找到一个叫CxAction.java 的文件,很象我的ACTION类
但对比了一下,发现里面多了一些我根本没操作过的数据库表和字段及一些我从没IMPORT过的东西!!!
我要操作的表 表名 userlist 字段只有3个 “ID” ,“USERNAME”, “USERPWD”,
还CHECK了一下对应的AbstractUserlist和Userlist确实没有添加过其他表,及字段。请大家看下两个文件的比较,不是我
类里的东西我会用红色标出来的,真的很奇怪,不知道在TOMCAT发布这个工程后这些东西是怎么出来的!!不知道大家
有没有碰到过这个问题,该怎么解决。。

我的ACTION:
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.hitt2.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.hitt2.Hibernate.Userlist;

import all.HibernateUtil;

/**
* MyEclipse Struts
* Creation date: 04-19-2007
*
* XDoclet definition:
* @struts.action validate="true"
*/
public class AdduserAction extends Action {
/*
* Generated Methods
*/

/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
Session session=HibernateUtil.currentSession();
Transaction tx=session.beginTransaction();
Userlist ulist=new Userlist();
ulist.setUsername("sonic");
ulist.setUserpwd("oksonic");我这里写2个参数,学习用,直接用值插,没有经过其他机制

session.save(ulist);
tx.commit();
HibernateUtil.closeSession();
return mapping.findForward("aduserfw");
}
}

TOMCAT 下 CxAction.java 文件
//Created by MyEclipse Struts
// XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_3.8.4/xslt/JavaClass.xsl

package com.sonic.struts.action;显然这个我在类里不是这么写的,不是这么定义路径,也没在工程里添加过这个包

import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Query;这个我也没有IMPORT过,IMPORT进去也没关系,但我从来没写过QUERY语句
import net.sf.hibernate.Session;
import net.sf.hibernate.Transaction;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.sonic.Gds1;这个我也没IMPORT过

import all.HibernateUtil;

/**
* MyEclipse Struts
* Creation date: 04-10-2005
*
* XDoclet definition:
* @struts:action validate="true"
*/
public class CxAction extends Action {类名变了

// --------------------------------------------------------- Instance Variables

// --------------------------------------------------------- Methods

/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
* @throws HibernateException
*/
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws HibernateException {

Session session=HibernateUtil.currentSession();
Transaction tx=session.beginTransaction();
Query query=session.createQuery("select gds1 from Gds1 as gds1");也
不知道是不是编译后系统定义表名成Gds1
List book=query.list();
request.setAttribute("test",book);感觉是在操作另外一个叫BOOK的表
(我不知道是不是编译机制的问题,需要这样操作,但起码这里应该2个字段)
tx.commit();
return mapping.findForward("/index.jsp");这个是对的,在我的XML里是这么定义
}

}
不知道是不是我理解错误,大家帮帮忙看看问题出在那里。。。。
...全文
420 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jk88811 2007-04-19
  • 打赏
  • 举报
回复
楼主解释得相当清楚

不过我帮不了你, 支持一下
josejose 2007-04-19
  • 打赏
  • 举报
回复
大家帮我看看吧,错误不一定都是一样,但编译后出现这种额外的东西这种情况碰到过吗?是不是中病毒了?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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