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}&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}"/> </td>
<td width="132"> </td>
</tr>
<tr>
<td><div align="right">教师年龄:</div></td>
<td><s:textfield name="age" value="%{t.age}"/> </td>
<td> </td>
</tr>
<tr>
<td><div align="right">教师电话:</div></td>
<td><s:textfield name="tel" value="%{t.tel}"/> </td>
<td> </td>
</tr>
<tr>
<td><div align="right">教师邮箱:</div></td>
<td><s:textfield name="email" value="%{t.email}"/> </td>
<td> </td>
</tr>
<tr>
<td><div align="right">教师编号:</div></td>
<td><s:textfield name="teaId" value="%{t.teaId}"/> </td>
<td> </td>
</tr>
<tr>
<td><div align="right">教师密码:</div></td>
<td><s:textfield name="tpassword" value="%{t.tpassowrd}"/> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><s:submit value="添加"/><s:reset value="重置 "/> </td>
<td> </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的主键是什么,然后向上跟一下代码。
一般更新操作,建议先查下一出要更新的对象,然后修改对象的属性后再update到数据库。
求助 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}&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}"/> </td>
<td width="132"> </td>
</tr>
<tr>
<td><div align="right">教师年龄:</div></td>
<td><s:textfield name="age" value="%{t.age}"/> </td>
<td> </td>
</tr>
<tr>
<td><div align="right">教师电话:</div></td>
<td><s:textfield name="tel" value="%{t.tel}"/> </td>
<td> </td>
</tr>
<tr>
<td><div align="right">教师邮箱:</div></td>
<td><s:textfield name="email" value="%{t.email}"/> </td>
<td> </td>
</tr>
<tr>
<td><div align="right">教师编号:</div></td>
<td><s:textfield name="teaId" value="%{t.teaId}"/> </td>
<td> </td>
</tr>
<tr>
<td><div align="right">教师密码:</div></td>
<td><s:textfield name="tpassword" value="%{t.tpassowrd}"/> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><s:submit value="添加"/><s:reset value="重置 "/> </td>
<td> </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到数据库。