JDK 1.5 tomcat 5.5 
javax.servlet.ServletException: could not insert: [DGH.model.HotelCategoryModel]
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause org.hibernate.exception.GenericJDBCException: could not insert: [DGH.model.HotelCategoryModel]
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
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)
DGH.dao.Dao.insert(Dao.java:30)
DGH.action.HotelCategoryAction.insert(HotelCategoryAction.java:61)
DGH.action.HotelCategoryAction.execute(HotelCategoryAction.java:35)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)这是错误信息         Hibernate: insert into LYW.dbo.HotelCategory (District) values (?) select scope_
identity()
这是tomcat后台打出的hql语句package DGH.action;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;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 DGH.dao.Dao;
import DGH.model.HotelCategoryModel;
public class HotelCategoryAction extends Action {
private Dao dao = new Dao();
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
String clazz = request.getParameter("clazz");//jsp页面请求删除或者添加
System.out.println("clazz==="+clazz);
if(clazz!=null)
{
if(clazz.equals("delete"))
{
int HotelCategoryid = Integer.parseInt(request.getParameter("HotelCategoryid"));
delete(HotelCategoryid);
}
if(clazz.equals("insert"))
{
String District = request.getParameter("District");
//System.out.println("District=="+District);
this.insert(District);我测试了 District是有内容的
}
}
List<HotelCategoryModel> list = (ArrayList<HotelCategoryModel>)select();
HttpSession session = request.getSession();
session.setAttribute("HotelCategorys", list);

return mapping.findForward("HotelCategory");

}
private List select()
{
return dao.select("from HotelCategoryModel");
}
private void delete(int HotelCategoryid)
{
HotelCategoryModel model = new HotelCategoryModel();
model.setHotelCategoryid(HotelCategoryid);
dao.delete(model, HotelCategoryModel.class);
}
private void insert(String District)
{
Dao Dao = new Dao();
HotelCategoryModel model = new HotelCategoryModel();
model.setDistrict(District);

Dao.insert(model, HotelCategoryModel.class);
}
}我用的是sql2000查询没有问题数据库中字段是自增型的
<?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">
<hibernate-mapping>
<class name="DGH.model.HotelCategoryModel" table="HotelCategory" schema="dbo" catalog="LYW">
<id name="HotelCategoryid">
            <column name="HotelCategoryid"/>
            <generator class="native" />
        </id>
        <property name="District">
            <column name="District" />
        </property>
</class>
</hibernate-mapping>我还写了一段测试代码 
public class DBtest {
static Dao dao = new Dao();
public static void main(String[] args) {
// TODO Auto-generated method stub

DBtest db = new DBtest();
List list  = dao.select("from HotelCategoryModel");
db.insert("dddddddddd");
System.out.println(list.size());
}
private  void insert(String District)
{
HotelCategoryModel model = new HotelCategoryModel();
model.setDistrict("aaaaaaaaa");

dao.insert(model, HotelCategoryModel.class);
}
}
可以正常插入数据.和上面的类都在一个工程中
有人能帮我看一下是什么问题吗

解决方案 »

  1.   

    数据库里你主键是自增的吗?
    配置文件最好配置一下他的type
    比如
    <id name="HotelCategoryid" type="java.lang.Integer"> 
                <column name="HotelCategoryid"/> 
                <generator class="native" /> 
            </id> 
            <property name="District" type="java.lang.String"> 
                <column name="District" length="150"/> 
            </property> 
      

  2.   


    private void insert(String District)
    {
    Dao Dao = new Dao();
    HotelCategoryModel model = new HotelCategoryModel();
    model.setDistrict(District);Dao.insert(model, HotelCategoryModel.class);
    }} 
    你这段代码错了,因为你的测试代码插入的时候你是直接赋的值
    而这里你用的变量,但是你又并没有给这个变量赋值。
    你说这会不会错。
      

  3.   


    private  void insert(String District)
    {
    HotelCategoryModel model = new HotelCategoryModel();
    model.setDistrict("aaaaaaaaa");dao.insert(model, HotelCategoryModel.class);
    }

    他的这一段代码是可以正常插入数据的。
    那你说是哪里错了。
      

  4.   

    他这里并没有用他的参数District
    而是直接赋值为aaaaaaa
      

  5.   

    String District = request.getParameter("District"); 
    //System.out.println("District=="+District); 
    this.insert(District);我测试了 District是有内容的 
      

  6.   

    呵呵谢谢大家了.我问题解决了.是数据长度超出数据库中字段长段了.我很郁闷为什么不提示字段超长的那个错误提示.我调了好半天呢
    还有就是native型最好改成iden...什么的那个.