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";
}
为什么?这是我做毕业设计这几天问的最多的话,快被折磨疯了,如果一直不成功也就算了,可是明明成功过,这让我很是郁闷,跪求答案~

解决方案 »

  1.   

    hibernate2级缓存的问题,把缓存关了 具体百度吧
      

  2.   

    1. 有异常提示吗?2. 你的Homeworkinfo有没有与其他表关联,而此表中有字段做的是主键?3. 给你一种写删除的方法,在你的dao中只需用传递一个ID过去,通过ID获取到这个对象,然后直接删除这个对象,不用hql去删除,伪代码如下:    tc.begin();
        ss.delete(ss.get(HomeworkInfo.class, attribute));
        tc.commit();
      

  3.   

    发现如果是新添加一条跟以前hwId相同的记录就不能执行,如果新建一条记录就可以删除
      

  4.   

    楼主数据表是否存在主外键关系,如果你是要删除主表而外表有相应的记录是删除不掉的,至于页面还是会跳转估计是异常没有进行处理,如果是这个可以在hibernate中映射文件中设置成cascade=all.这样就可以级联删除了如果不是此原因,看后台日志是否抛出了异常,贴出来分析分析!
      

  5.   

    看控制台的sql,然后再执行sql试试
      

  6.   

    没有设置外键,我是根据自己定义的一个hwId(String类型)来删除的,现在出现的问题是,如果这个hwId是之前曾经删除过的,那么这次添加后再删就不行了
      

  7.   

    这样,在你delete之后,flush一次!
      

  8.   

    那就是表的设计有问题了。表的ID设置成int类型 自动增长,就不会出现这个问题了。
      

  9.   

    已经解决了,谢谢大家了,原来是我犯了个低级错误,hql语句写的不对。。