代码如下:
public class PlanManagerDAOImpl implements PlanManagerDAO{        public boolean deletePlanItem(Long itemId) {
Session s = HbnUtil.getSession();
Transaction tran = s.beginTransaction();
boolean flag=false;
try {
 String hql="delete from planItem where id="+itemId;
 int number=s.createQuery(hql).executeUpdate();
 if(number==1) return flag=true;
 tran.commit();
} catch (Exception e) {
e.printStackTrace();
}finally{
s.close();
}
return flag;
}
//测试代码:
public static void main(String[] args){
     PlanManagerDAOImpl pmdi=new PlanManagerDAOImpl();    
         boolean al=pmdi.deletePlanItem(61L);
     System.out.println("al===="+al);
}
}执行结果:Hibernate: delete from S_PLAN_ITEM where ID=61
          al====true

解决方案 »

  1.   

    "delete from planItem where id="+itemId
    楼主可以将hql语句换个格式试试:
    " delete from planItem where id= ? "或
    " delete from planItem where id= :itemId ",
    然后用query的setParameter或者setLong给参数赋值试试。
    有时字符串拼接会出问题........
      

  2.   

    如果单单是 Hibernate 那么 这个你在查找看看。PreparedStatement //这个我是直接插jdk api的
    int executeUpdate()
    (1) SQL 数据操作语言 (DML) 语句的行数 (2) 对于无返回内容的 SQL 语句,返回 0 if(number==1) {
        return flag=true;//如果删除成功  你就返回了  下面怎么commit 
    }
    tran.commit();我不建议用   if的 简写
    if(number==1) return flag=true;
    tran.commit();看看 你的语句 会不会出问题
      

  3.   

    把hibernate里的sql调试选项打开,用console里输出的实际sql到数据库里实际执行,如果能成功删除,则问题出在程序中,否则在数据库层面如果在程序中,考虑事务是否成功提交?关闭session是否可以完成delete操作
      

  4.   

    把delete from S_PLAN_ITEM where ID=61用数据库查询分析器试下,可能这句话根本就无法运行
      

  5.   

    public class PlanManagerDAOImpl implements PlanManagerDAO{ public boolean deletePlanItem(Long itemId) {
    Session s = HbnUtil.getSession();
    Transaction tran = s.beginTransaction();
    boolean flag=false;
    try {
    String hql="delete from planItem where id="+itemId;
    int number=s.createQuery(hql).executeUpdate();
    tran.commit();
    if(number==1){
    return flag=true;
    }
    } catch (Exception e) {
    e.printStackTrace();
    }finally{
    s.close();
    }
    return flag;
    }
    //测试代码:
    public static void main(String[] args){
      PlanManagerDAOImpl pmdi=new PlanManagerDAOImpl(); 
      boolean al=pmdi.deletePlanItem(61L);
      System.out.println("al===="+al);
    }
    }你把return 放到了提交事务的前面 会更新就见鬼了
      

  6.   

    @Transactional 
    public boolean deletePlanItem(Long itemId) {
            Session s = HbnUtil.getSession();
            Transaction tran = s.beginTransaction();
            boolean flag=false;
            try {
                String hql="delete from planItem where id="+itemId;
                int number=s.createQuery(hql).executeUpdate();
                tran.commit();
                if(number==1){
                    return flag=true;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                s.close();
            }
            return flag;
        }
        //测试代码:
        public static void main(String[] args){
          PlanManagerDAOImpl pmdi=new PlanManagerDAOImpl(); 
          boolean al=pmdi.deletePlanItem(61L);
          System.out.println("al===="+al);
        }