日期:2014-05-19  浏览次数:20871 次

hibernate+struts框架,删除操作有的时候可以成功,有的时候只能跳转,不能删除
public void deletee(Object attribute){
Session ss=HibernateSessionFactory.getSession();
Transaction tc= ss.getTransaction();
try{
tc.begin();
String hql="DELETE Homeworkinfo WHERE id=?";
Query q=ss.createQuery(hql);
String s=(String)attribute;
System.out.println("s:"+s);
q.setString(0,s);
q.executeUpdate();
tc.commit();

}catch(Exception e){tc.rollback();System.out.println(e);}
ss.close();
}
这是我dao中的代码,也就是delete类,运行时,s可以输出正确,但就是有的时候不能删除
下面是我service中代码
public void delete(Object attribute){
HomeworkinfoDAO dao=new HomeworkinfoDAO();

System.out.println(attribute);
System.out.println("att:"+dao.findByHwId(attribute).size());

if(dao.findByHwId(attribute)!=null){
dao.deletee(attribute);
}else{
System.out.println("id不存在");
}

}
下面是action中
public String execute() throws Exception{
HwinfoService hwservice=new HwinfoService();
hwservice.delete(getHwId());
return "success";
}
为什么?这是我做毕业设计这几天问的最多的话,快被折磨疯了,如果一直不成功也就算了,可是明明成功过,这让我很是郁闷,跪求答案~

------解决方案--------------------
hibernate2级缓存的问题,把缓存关了 具体百度吧
------解决方案--------------------
1. 有异常提示吗?

2. 你的Homeworkinfo有没有与其他表关联,而此表中有字段做的是主键?

3. 给你一种写删除的方法,在你的dao中只需用传递一个ID过去,通过ID获取到这个对象,然后直接删除这个对象,不用hql去删除,伪代码如下:
Java code

    tc.begin();
    ss.delete(ss.get(HomeworkInfo.class, attribute));
    tc.commit();

------解决方案--------------------
楼主数据表是否存在主外键关系,如果你是要删除主表而外表有相应的记录是删除不掉的,至于页面还是会跳转估计是异常没有进行处理,如果是这个可以在hibernate中映射文件中设置成cascade=all.这样就可以级联删除了。。。如果不是此原因,看后台日志是否抛出了异常,贴出来分析分析!
------解决方案--------------------
看控制台的sql,然后再执行sql试试
------解决方案--------------------
把Id弄成自增长的
------解决方案--------------------
是不是事务有问题?或者事务没有开启。
------解决方案--------------------
这样,在你delete之后,flush一次!
------解决方案--------------------
那就是表的设计有问题了。表的ID设置成int类型 自动增长,就不会出现这个问题了。