The given object has a null identifier

场景: The given object has a null identifier: entity.Teacher有关问题

求助 The given object has a null identifier: entity.Teacher问题
在网上下了一个系统,结果出错连连
下面是教师修改的问题:update失败,出现 The given object has a null identifier: entity.Teacher  我查了网上的,加入了s:hidden也不行

其中:
addteacher.java里面的主要段落为:
 public String updataTeacher(){
         Teacher t=new Teacher();
      TeacherDao td=new TeacherDao();
      t.setAge(age);
      t.setEmail(email);
      t.setTeaId(teaId);
      t.setTel(tel);
      t.setTname(tname);
      t.setTpassword(tpassword);
      t.setTsex(tsex);
      t.setTqq(tqq);
      t.setTinf(tinf);
      t.setTsubject(tsubject);
      if(t!=null){
          td.updateTeacher(t);
          return SUCCESS;
      }
      return INPUT;
    }//就是这个出错,学生的那边用另外一种方法是没错的,但如果改的话要从头改到尾


      teacherDAO里面更新的核心代码:
 public void updateTeacher(Teacher tc)
    {
        session=HibernateSessionFactory.getSession();
        try{
            transaction=session.beginTransaction();
            session.update(tc);
            transaction.commit();
        }
        catch (Exception e){
            e.printStackTrace();
        }
        HibernateSessionFactory.closeSession();
    }


    struts中有关teacher的代码是这样的:
 <!--查看所有教师-->
         <action name="tpageAction" class="AdminAction.TpageAction">
            <result type="redirect" >/allTeacher?pageNumber=${pageNumber}&amp;totalPage=${totalPage}</result>   
        </action>
        <action name="allTeacher" class="AdminAction.AllTeacher">
           <result name="success">/admin/allteacher.jsp</result>   
        </action>
        <!--获取教师信息-->
        <action name="getTeacher" class="AdminAction.DguTeacher" method="getTeacher">
        <result name="success">/admin/getTeacher.jsp</result>
        <result name="input">/admin/error.jsp</result>
        </action>
        <!--修改教师信息-->
        <action name="updataTeacher" class="AdminAction.AddTeacher" method="updataTeacher">
        <result name="success">/admin/success.jsp</result>
        <result name="input">/admin/error.jsp</result>
        </action>
        <!--删除教师-->
        <action name="deleTeacher" class="AdminAction.DguTeacher">
          <result name="success">/admin/success.jsp</result>
          <result name="input">/admin/error.jsp</result>
        </action>
        <!--添加教师-->
        <action name="addTeacher" class="Action.defaultAction">
        <result name="success">/admin/addteacher.jsp</result>    
        </action>


    DguTeacher.java里面是这样的:

public class DguTeacher extends ActionSupport{
    private int tid;
   TeacherDao td=new TeacherDao();
   private Teacher t;
      /**
     * @return the t
     */
    public Teacher getT() {
        return t;
    }

    /**
     * @param t the t to set
     */
    public void setT(Teacher t) {
        this.t = t;
    }
      /**
     * @return the tid
     */
    public int getTid() {
        return tid;
    }

    /**
     * @param tid the tid to set
     */
    public void setTid(int tid) {
        this.tid = tid;
    }
    //删除教师
    public String execute() throws Exception {
       
       if(tid!=0){
       td.deleteTeacher(tid);
       return SUCCESS;
       }
       return INPUT;
    }

   //查看教师基本信息
    public String getTeacher(){
        if(td.getTeacher(tid)!=null){
            setT(td.getTeacher(tid));
            return SUCCESS;
        }
        return INPUT;
    }
  

  
}

接下来的是JSP页面:


GetTeacher.jsp页面
    <s:form id="form1" name="form1" method="post" action="updataTeacher">
  <table width="503" height="267" border="1" align="center">
    <tr>
      <td colspan="3"><div align="center">修改教师基本信息</div></td>
      <s:hidden name="tid" value="%{t.tid}"/>
    </tr>
    <tr>
      <td width="233"><div align="right">教师姓名:</div></td>
      <td width="116"><s:textfield name="tname" value="%{t.tname}"/>&nbsp;</td>
      <td width="132">&nbsp;</td>
    </tr>
    <tr>
      <td><div align="right">教师年龄:</div></td>
      <td><s:textfield name="age" value="%{t.age}"/>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><div align="right">教师电话:</div></td>
      <td><s:textfield name="tel" value="%{t.tel}"/>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><div align="right">教师邮箱:</div></td>
      <td><s:textfield name="email" value="%{t.email}"/>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><div align="right">教师编号:</div></td>
      <td><s:textfield name="teaId" value="%{t.teaId}"/>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><div align="right">教师密码:</div></td>
      <td><s:textfield name="tpassword" value="%{t.tpassowrd}"/>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><s:submit value="添加"/><s:reset value="重置 "/>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
  </table>
</s:form>



然后就错鸟,提示:
org.hibernate.TransientObjectException: The given object has a null identifier: entity.Teacher
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.getUpdateId(DefaultSaveOrUpdateEventListener.java:249)
at org.hibernate.event.def.DefaultUpdateEventListener.getUpdateId(DefaultUpdateEventListener.java:46)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:217)
at org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:33

等等,其中有两个提示点是:
at dao.TeacherDao.updateTeacher(TeacherDao.java:40)
at AdminAction.AddTeacher.updataTeacher(AddTeacher.java:63)
就是update那句

我查了下应该是update根本没有拿到要更新的对象,所以提示出错了?

跪求各位大神了,最近特别感谢各位,里面还有很多问题,如果有大神能帮忙我一下能否加一下我的QQ帮忙我看一下,感激不尽啊,一个人毕设做一个SSH系统真的不容易啊!
感激不尽啊..

------解决方案--------------------
你的Teacher对象是瞬时对象,
而且你的对象的id,是空的。
对一个要更新的对象,应该确保是有一个id,而且这个id对应的记录在数据库是存在的。

你的tid有没有取到?,
如果确定这个实体有id了,还报错。
那你先刷新一下实体,然后在修改。
------解决方案--------------------
像1楼提示的,
楼主找一下id为空的原因
------解决方案--------------------
session.update(tc);
在这个地方打个断点,看看tc的主键是什么,然后向上跟一下代码。


      // 这里的t对象的主键是哪个属性?
      Teacher t=new Teacher();
      TeacherDao td=new TeacherDao();
      t.setAge(age);
      t.setEmail(email);
      t.setTeaId(teaId); //如果这个设置的是主键,看看这里的teaId是什么?是不是你要的值。
      t.setTel(tel);
      t.setTname(tname);
      t.setTpassword(tpassword);
      t.setTsex(tsex);
      t.setTqq(tqq);
      t.setTinf(tinf);
      t.setTsubject(tsubject);
      if(t!=null){
          td.updateTeacher(t);
          return SUCCESS;
      }


一般更新操作,建议先查下一出要更新的对象,然后修改对象的属性后再update到数据库。