我用ssh做一个添删修改程序,框架运转正常,,起码,登陆和添加功能已正常运行,目前要做的就是删除,在这里我贴出一些主要的代码1.现在已确定是UserDAO.java文件中的delete删除方法,就在这里报错,代码如下public boolean delete(User persistentInstance) {
boolean Flag=false;
log.debug("deleting User instance");
System.out.println("UserDao.java中的delete方法已被执行.......");
try {
getHibernateTemplate().delete(persistentInstance);//这里的delete方法参数一定要实休对像类型的吗?
log.debug("delete successful");
Flag=true;
} catch (RuntimeException re) {
Flag=false;
log.error("delete failed", re);
throw re;
}
return Flag;
}
2.报错提示是:UserDao.java中的delete方法已被执行.......
org.springframework.dao.InvalidDataAccessApiUsageException: the transient instance passed to delete() had a null identifier; nested exception is org.hibernate.TransientObjectException: the transient instance passed to delete() had a null identifier
org.hibernate.TransientObjectException: the transient instance passed to delete() had a null identifier
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:67)
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:579)
at org.springframework.orm.hibernate3.HibernateTemplate$27.doInHibernate(HibernateTemplate.java:794)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:788)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:784)
at com.zdw.dao.impl.UserDAO.delete(UserDAO.java:66)
at com.zdw.service.impl.UserService.delete(UserService.java:46)
at com.zdw.web.struts.action.DelAction.execute(DelAction.java:59)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
3.大家会的帮帮忙吧,,,本人实在是新手,,,,我想应该就是接收的数据不合法吧,我只直接给一个string类型的值进去,可以delete方法又不支持string类型数据,,,哎...会的帮一下了,在这里谢谢了...
boolean Flag=false;
log.debug("deleting User instance");
System.out.println("UserDao.java中的delete方法已被执行.......");
try {
getHibernateTemplate().delete(persistentInstance);//这里的delete方法参数一定要实休对像类型的吗?
log.debug("delete successful");
Flag=true;
} catch (RuntimeException re) {
Flag=false;
log.error("delete failed", re);
throw re;
}
return Flag;
}
2.报错提示是:UserDao.java中的delete方法已被执行.......
org.springframework.dao.InvalidDataAccessApiUsageException: the transient instance passed to delete() had a null identifier; nested exception is org.hibernate.TransientObjectException: the transient instance passed to delete() had a null identifier
org.hibernate.TransientObjectException: the transient instance passed to delete() had a null identifier
at org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:67)
at org.hibernate.impl.SessionImpl.delete(SessionImpl.java:579)
at org.springframework.orm.hibernate3.HibernateTemplate$27.doInHibernate(HibernateTemplate.java:794)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:366)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:788)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:784)
at com.zdw.dao.impl.UserDAO.delete(UserDAO.java:66)
at com.zdw.service.impl.UserService.delete(UserService.java:46)
at com.zdw.web.struts.action.DelAction.execute(DelAction.java:59)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
3.大家会的帮帮忙吧,,,本人实在是新手,,,,我想应该就是接收的数据不合法吧,我只直接给一个string类型的值进去,可以delete方法又不支持string类型数据,,,哎...会的帮一下了,在这里谢谢了...
你传了个空值,数据库中没有这个USER~~
这个事Spring接口提供的方法 新手不怎么会用的(我也是新手)
所以我都是 用hibernate提供的方法进行操作每一个接口都被Spring注入了sessionFactory
sessionFactoey里面有session所以可以写 this.getSessionFactory().openSession().delete()方法
也可以直接那session 直接写this.getSession().操作就可以了 Spring的接口不熟练的就用session做吧 比较容易点
楼主可以将user对象 从数据库中加载出来 然后再删除 就可以了。
delete(final Object entity, final LockMode lockMode)
delete(String queryString)
delete(String queryString, Object value, Type type)
delete(final String queryString, final Object[] values, final Type[] types)
例子1:
public void delbyAA(final String aa) {
this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws SQLException,
HibernateException {
net.share_info.dxw.hibernate.Smkserver aa;
Query query = session.createQuery(
"delete com.pigo.TestC where aa = ? ");
query.setString(0, aa);
query.executeUpdate();
return null;
}
});
}
例子2:String hsql = "delete from xxx where id>5 and id<15";Session session = getHibernateTemplate().getSessionFactory().openSession();
Transaction ts = session.beginTransaction();
session.delete(hsql);
ts.commit();还有,getJdbcTemplate()里有个update(sql,parame);方法
/**
* @create 2009-7-30
* @return
* @explain 人员管理-删除人员
*/
public boolean employeeDel(EmployeeQueryViewBean employeeQueryViewBean) {
Integer eid = employeeQueryViewBean.getEid();
Employee employee = employeeDao.findUnique(eid);
if(employee == null){
return false;
}
return employeeDao.del(employee);
}
否则它还是映射不到这个实体。
先通过Id获取user再删除
delete删除时是根据主键删除 没有实际对应的记录 应该会报错
传入一个主键ID啊,就是你要删除的那条记录的ID啊
resourceId 主键ID,先获得要删除的对象,再调用getHibernateTemplate().delete(userDto);就可以了。
顺便说下,定义变量第一个字母应小写。
传递给delete()方法的这个瞬时实例(对象)是一个null的标识,就是主键为null。
也就是说你传给这个方法的对象是一个瞬时对象,还没有和数据库建立联系,估计是你new 了一个User对象吧?你应该给delete()方法传递一个持久对象,即数据库中存在的对象。
super.getHibernateTemplate().delete(this.get(id, cla));
}public Object get(Serializable id, Class cla) {
return super.getHibernateTemplate().get(cla, id);
}
}
at com.zdw.dao.impl.UserDAO.delete(UserDAO.java:66)
这个是你出现问题的根本,你在删除的时候调用的是UserDAO的delete方法,这个方法需要传入一个对象的吧,你是不是传入了一个null啊,仔细查查,或者把这个方法的签名贴出来我看一下。
public void deleteByHQL(Integer id){
String hql = "delete from Orders o where o.orderId = ?";
this.getHibernateTemplate().bulkUpdate(hql,id);
}
试试看...