急!!!!在添加记录的时候,总是提示错误插入ID是空,JSP中应该是自动获取ID的吧?
到低怎么搞?
小弟是初学者.
给个建议吧!!
非常感谢.....

解决方案 »

  1.   

    添加记录和JSP本身有什么关系?!?!?!?
      

  2.   

    表里的ID字段如果是这样定义
    id int(2) not null auto_increment
      

  3.   

    你添加数据库前有没有获得id的值
    就是request.getpraram
      

  4.   

    //////////////////////添加信息开始...........
    public static void addservgrpnew(
    String servGrpName,String servNbr,String servFlag,String state,String stateTime,String voc,
     String custom,String procName,String lastName,String lastProcName,String mmsId)
    {   
    ServGrpNewDAO  servgrpnewdao = new ServGrpNewDAO();
    ServGrpNew sgn = new ServGrpNew();
                //sgn.setServGrpId(Long.parseLong(servGrpId));
                System.out.println(""+servGrpName+"");
                sgn.setServGrpName(servGrpName);
                sgn.setServNbr(servNbr);
                sgn.setServFlag(servFlag);
                sgn.setState(state);
                Date statetime = new Date(stateTime);//Time样式为yyyy-MM-dd////
                sgn.setStateTime(statetime);
                Byte s=new Byte(voc);
                sgn.setVoc(s);
                Byte co=new Byte(custom);
    sgn.setCustom(co);
    sgn.setProcName(procName);
    sgn.setLastName(lastName);
    sgn.setLastProcName(lastProcName);
    Long mmsid=Long.parseLong(mmsId);
    sgn.setMmsId(mmsid);
    // System.out.println(sgn.getServGrpId());
    servgrpnewdao.save(sgn);//添加保存!!!!!
    if(sgn.getServGrpId()!=null){
     
        System.out.println(sgn.getServGrpId());
    System.out.println(sgn.getLastName());
    System.out.println(sgn.getServFlag());
    System.out.println(sgn.getServNbr());
    System.out.println(sgn.getState());
    System.out.println(sgn.getStateTime());

       }
        else
       {
                     System.out.print("Add serv_grop failure!_____");    
       }
    }
    /////////////////////////////////添加结束!!!!!!!!!!!!!!
      

  5.   

    save()在下面:
    package serv;import java.util.Date;
    import java.util.List;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.hibernate.LockMode;
    import org.hibernate.Query;
    import org.hibernate.criterion.Example;/**
     * Data access object (DAO) for domain model class ServGrpNew.
     * 
     * @see serv.ServGrpNew
     * @author MyEclipse Persistence Tools
     */public class ServGrpNewDAO extends BaseHibernateDAO {
    private static final Log log = LogFactory.getLog(ServGrpNewDAO.class);
    // property constants
    public static final String SERV_GRP_NAME = "servGrpName";
    public static final String SERV_NBR = "servNbr";
    public static final String SERV_FLAG = "servFlag";
    public static final String STATE = "state";
    public static final String VOC = "voc";
    public static final String CUSTOM = "custom";
    public static final String PROC_NAME = "procName";
    public static final String LAST_NAME = "lastName";
    public static final String LAST_PROC_NAME = "lastProcName";
    public static final String MMS_ID = "mmsId"; public void save(ServGrpNew transientInstance) {
    log.debug("saving ServGrpNew instance");
    try {
    getSession().save(transientInstance);
    log.debug("save successful");
    } catch (RuntimeException re) {
    log.error("save failed", re);
    throw re;
    }
    } public void delete(ServGrpNew persistentInstance) {
    log.debug("deleting ServGrpNew instance");
    try {
    getSession().delete(persistentInstance);
    log.debug("delete successful");
    } catch (RuntimeException re) {
    log.error("delete failed", re);
    throw re;
    }
    } public ServGrpNew findById(java.lang.Long id) {
    log.debug("getting ServGrpNew instance with id: " + id);
    try {
    ServGrpNew instance = (ServGrpNew) getSession().get(
    "serv.ServGrpNew", id);
    return instance;
    } catch (RuntimeException re) {
    log.error("get failed", re);
    throw re;
    }
    } public List findByExample(ServGrpNew instance) {
    log.debug("finding ServGrpNew instance by example");
    try {
    List results = getSession().createCriteria("serv.ServGrpNew").add(
    Example.create(instance)).list();
    log.debug("find by example successful, result size: "
    + results.size());
    return results;
    } catch (RuntimeException re) {
    log.error("find by example failed", re);
    throw re;
    }
    } public List findByProperty(String propertyName, Object value) {
    log.debug("finding ServGrpNew instance with property: " + propertyName
    + ", value: " + value);
    try {
    String queryString = "from ServGrpNew as model where model."
    + propertyName + "= ?";
    Query queryObject = getSession().createQuery(queryString);
    queryObject.setParameter(0, value);
    return queryObject.list();
    } catch (RuntimeException re) {
    log.error("find by property name failed", re);
    throw re;
    }
    } public List findByServGrpName(Object servGrpName) {
    return findByProperty(SERV_GRP_NAME, servGrpName);
    } public List findByServNbr(Object servNbr) {
    return findByProperty(SERV_NBR, servNbr);
    } public List findByServFlag(Object servFlag) {
    return findByProperty(SERV_FLAG, servFlag);
    } public List findByState(Object state) {
    return findByProperty(STATE, state);
    } public List findByVoc(Object voc) {
    return findByProperty(VOC, voc);
    } public List findByCustom(Object custom) {
    return findByProperty(CUSTOM, custom);
    } public List findByProcName(Object procName) {
    return findByProperty(PROC_NAME, procName);
    } public List findByLastName(Object lastName) {
    return findByProperty(LAST_NAME, lastName);
    } public List findByLastProcName(Object lastProcName) {
    return findByProperty(LAST_PROC_NAME, lastProcName);
    } public List findByMmsId(Object mmsId) {
    return findByProperty(MMS_ID, mmsId);
    } public List findAll() {
    log.debug("finding all ServGrpNew instances");
    try {
    String queryString = "from ServGrpNew";
    Query queryObject = getSession().createQuery(queryString);
    return queryObject.list();
    } catch (RuntimeException re) {
    log.error("find all failed", re);
    throw re;
    }
    } public ServGrpNew merge(ServGrpNew detachedInstance) {
    log.debug("merging ServGrpNew instance");
    try {
    ServGrpNew result = (ServGrpNew) getSession().merge(
    detachedInstance);
    log.debug("merge successful");
    return result;
    } catch (RuntimeException re) {
    log.error("merge failed", re);
    throw re;
    }
    } public void attachDirty(ServGrpNew instance) {
    log.debug("attaching dirty ServGrpNew instance");
    try {
    getSession().saveOrUpdate(instance);
    log.debug("attach successful");
    } catch (RuntimeException re) {
    log.error("attach failed", re);
    throw re;
    }
    } public void attachClean(ServGrpNew instance) {
    log.debug("attaching clean ServGrpNew instance");
    try {
    getSession().lock(instance, LockMode.NONE);
    log.debug("attach successful");
    } catch (RuntimeException re) {
    log.error("attach failed", re);
    throw re;
    }
    }
    }
      

  6.   

    JSP里面调用addservgrpnew代码如下:
    <%
    } else if (request.getParameter("action").equals("addsave")) {
    %>

    <!--添加业务保存开始-->
    <%       
    System.out.println(servgrid);
    String servgrpname = new String(request.getParameter("servgrpname").getBytes("ISO-8859-1"), "gb2312");
    String servnamber = new String(request.getParameter("servnamber").getBytes("ISO-8859-1"), "gb2312");
    String servflag = new String(request.getParameter("servflag").getBytes("ISO-8859-1"), "gb2312");
    String servstate = new String(request.getParameter("servstate").getBytes("ISO-8859-1"), "gb2312");
    String servtime = new  String(request.getParameter("servtime").getBytes("ISO-8859-1"), "gb2312");
    String voc = new String(request.getParameter("voc").getBytes("ISO-8859-1"), "gb2312");
    String custom = new String(request.getParameter("custom").getBytes("ISO-8859-1"), "gb2312");
    String procname = new String(request.getParameter("procname").getBytes("ISO-8859-1"), "gb2312");
    String lastprocname = new String(request.getParameter("lastprocname").getBytes("ISO-8859-1"), "gb2312");
    String uplastprocname = new String(request.getParameter("uplastprocname").getBytes("ISO-8859-1"), "gb2312");
    String mmsid = new String(request.getParameter("mmsid").getBytes("ISO-8859-1"), "gb2312");
    ServGrpNew.addservgrpnew(servgrpname,servnamber,servflag,servstate,servtime,voc,custom,procname,lastprocname,uplastprocname,mmsid);
    out.println("<p>添加成功</p><p><a class=\"add\" href=\"index.jsp\">返回</a><br><a class=\"add\" href=\"index.jsp?action=add\">继续添加</a></p>");
    %>
    <!--业务保存结束-->
      

  7.   

    在 ServGrpNew.hbm.xml 中,是这样配置的吗?
            <id name="servGrpId" type="java.lang.Integer">
                <column name="id" />
                <generator class="native"></generator>
            </id>
    -------------
    <name="servGrpId"> 与 <column name="id" /> 映射么?
      

  8.   

    不是
    是这样的
     <id name="servGrpId" type="java.lang.Long">
                <column name="serv_grp_id" precision="18" scale="0" />
                <generator class="identity" />
            </id>
      

  9.   

    我知道你的sql语句.
    你可能在insert的的时候 sql语句错误或者是得到的变量错误.
    LZ建议你找点关键的代码贴出来好不 看的我头疼
      

  10.   

    我改了一下映射现在变成这样了<class name="serv.ServGrpNew" table="SERV_GRP_NEW" schema="dbo" catalog="ldtest">
            <id name="servGrpId" type="java.lang.Long">
                <column name="serv_grp_id" precision="18" scale="0" />
                <generator class="native" />
            </id>
      

  11.   

    就是在JSP页面取到值
    调用addservgrpnew()函数,而addservgrpnew()调用save()保存信息
    save()是用Hibernate映射生成的
    应该不会有问题
    我在addservgrpnew()这个里面测试的时候输出的servGrpId为空
    具体是这样的:
    JSP里面代码:
    <%       
    System.out.println(servgrid);
    String servgrpname = new String(request.getParameter("servgrpname").getBytes("ISO-8859-1"), "gb2312");
    String servnamber = new String(request.getParameter("servnamber").getBytes("ISO-8859-1"), "gb2312");
    String servflag = new String(request.getParameter("servflag").getBytes("ISO-8859-1"), "gb2312");
    String servstate = new String(request.getParameter("servstate").getBytes("ISO-8859-1"), "gb2312");
    String servtime = adate.toString();
    String voc = new String(request.getParameter("voc").getBytes("ISO-8859-1"), "gb2312");
    String custom = new String(request.getParameter("custom").getBytes("ISO-8859-1"), "gb2312");
    String procname = new String(request.getParameter("procname").getBytes("ISO-8859-1"), "gb2312");
    String lastprocname = new String(request.getParameter("lastprocname").getBytes("ISO-8859-1"), "gb2312");
    String uplastprocname = new String(request.getParameter("uplastprocname").getBytes("ISO-8859-1"), "gb2312");
    String mmsid = new String(request.getParameter("mmsid").getBytes("ISO-8859-1"), "gb2312");
    ServGrpNew.addservgrpnew(servgrpname,servnamber,servflag,servstate,servtime,voc,custom,procname,lastprocname,uplastprocname,mmsid);
    out.println("<p>添加成功</p><p><a class=\"add\" href=\"index.jsp\">返回</a><br><a class=\"add\" href=\"index.jsp?action=add\">继续添加</a></p>");
    %>
    addservgrpnew():
    public static void updatesaveserv(String servGrpId,
    String servGrpName,String servNbr,String servFlag,String state,String stateTime,String voc,
     String custom,String procName,String lastName,String lastProcName,String mmsId)
    {   
    ServGrpNewDAO  servgrpnewdao = new ServGrpNewDAO();
    ServGrpNew sgn = new ServGrpNew();
    sgn=servgrpnewdao.findById(Long.parseLong(servGrpId));/////按业务号查询             sgn.setServGrpId(Long.parseLong(servGrpId));
                sgn.setServGrpId(Long.parseLong(servGrpId));
            sgn.setServGrpName(servGrpName);
                sgn.setServNbr(servNbr);
                sgn.setServFlag(servFlag);
                sgn.setState(state);
                Date statetime = new Date(stateTime);//Time样式为yyyy-MM-dd////
                sgn.setStateTime(statetime);
                Byte s=new Byte(voc);
                sgn.setVoc(s);
                Byte co=new Byte(custom);
    sgn.setCustom(co);
    sgn.setProcName(procName);
    sgn.setLastName(lastName);
    sgn.setLastProcName(lastProcName);
    Long mmsid=Long.parseLong(mmsId);
    sgn.setMmsId(mmsid);
    servgrpnewdao.save(sgn);//添加保存!!!!!
        System.out.println(sgn.getLastName());
       System.out.println(sgn.getServFlag());
       System.out.println(sgn.getServNbr());
        System.out.println(sgn.getState());
       System.out.println(sgn.getStateTime());
       System.out.println(sgn.getServGrpName());
    }

    }
    save():..........................
    public void save(ServGrpNew transientInstance) {
    log.debug("saving ServGrpNew instance");
    try {
    getSession().save(transientInstance);
    log.debug("save successful");
    } catch (RuntimeException re) {
    log.error("save failed", re);
    throw re;
    }
    }
      

  12.   

    错误信息:
    无法将 NULL 值插入列 'serv_grp_id',表 'ldtest.dbo.SERV_GRP_NEW';该列不允许空值。INSERT 失败。
      

  13.   

    <id name="servGrpId" type="java.lang.Integer"> ----这个name指的是你实体类中的属性名
         <column name="id" />         ------- 这个column name指的是你数据库中表的字段名 
         <generator class="native"></generator>
     </id>你的数据库定义的字段名是 "id" ,你却把配置中的名称改为"serv_grp_id",会正确么?!!
      

  14.   

    数据库里面的字段名就是serv_grp_id
      

  15.   

    想办法把ID给加进去
    让ID为最后一条记录+1
    但是我怎么样才能取得最后一条的ID呢?
    是不是可以通过分页的信息取得最后一条的ID号呢?
    不过还是空啊
    晕了
      

  16.   


    有个问题想问一下发贴者,一开始你要是没有把字段设为自动增量.为什么你自动生成的hbm中oid为identity 呢
    <id name="servGrpId" type="java.lang.Long">
                <column name="serv_grp_id" precision="18" scale="0" />
                <generator class="identity" />
            </id>
      

  17.   

    看你的hibernate 怎么配置的了