应该和事务没有关系看看你的业务逻辑,第一次删除和第二次删除的日志是否是你希望执行的初步怀疑是struts那写的问题

解决方案 »

  1.   

    很简单,你的session没有关闭需要在commit后面加HibernateSessionFactory.closeSession();
      

  2.   

    还是不行
    public ActionForward delete(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {
    SupplierForm supplierForm = (SupplierForm) form;
    SupplierBean supplierBean = new SupplierBean();
    Integer supplierId = supplierForm.getId();
    try {
        supplierBean.delete(supplierId);  //删除,调用下面的delete()方法
    } catch (RuntimeException e) {
    System.out.println("*****************"+e);
    }
    try {
    Collection col = supplierBean.finall();
    request.setAttribute("supplierList", col);
    saveToken(request);
    } catch (Exception e) {
    e.printStackTrace();
    }
        return mapping.findForward("show");
    } //删除
    public void delete(Integer id)
    {
    SupplierBo supplierBo = new SupplierBo();
    Supplier supplier = supplierBo.findById(id);
    supplierBo.delete(supplier);   //调用下面的delete方法
    }         public void delete(Supplier supplier)
    {
    try {
    Session session = HibernateSessionFactory.currentSession();
    Transaction transaction = session.beginTransaction();
    session.delete(supplier);
    transaction.commit();
                            HibernateSessionFactory.closeSession();
    } catch (HibernateException e) {
    // TODO 自动生成 catch 块
    e.printStackTrace();
    }
    }
      

  3.   

    Supplier supplier  = (Supplier)session.get(Supplier.class,new Integer(9));  
    我想那个 9 是怎么回事?
    你确信你的数据库里有这个数据吗?他怎么可能被删除2次呢?
      

  4.   

    数据库有这条记录``这个只是做测试的时候用的实际上用的是
    public ActionForward delete(ActionMapping mapping, ActionForm form, 
    HttpServletRequest request, HttpServletResponse response) { 
    SupplierForm supplierForm = (SupplierForm) form; 
    SupplierBean supplierBean = new SupplierBean(); 
    Integer supplierId = supplierForm.getId(); 
    try { 
        supplierBean.delete(supplierId);  //删除,调用下面的delete()方法 
    } catch (RuntimeException e) { 
    System.out.println("*****************"+e); 

    try { 
    Collection col = supplierBean.finall(); 
    request.setAttribute("supplierList", col); 
    saveToken(request); 
    } catch (Exception e) { 
    e.printStackTrace(); 

        return mapping.findForward("show"); 
    } //删除 
    public void delete(Integer id) 

    SupplierBo supplierBo = new SupplierBo(); 
    Supplier supplier = supplierBo.findById(id); 
    supplierBo.delete(supplier);   //调用下面的delete方法 
    }          public void delete(Supplier supplier) 

    try { 
    Session session = HibernateSessionFactory.currentSession(); 
    Transaction transaction = session.beginTransaction(); 
    session.delete(supplier); 
    transaction.commit(); 
                            HibernateSessionFactory.closeSession(); 
    } catch (HibernateException e) { 
    // TODO 自动生成 catch 块 
    e.printStackTrace(); 

    }
      

  5.   

    public void delete(Integer id)  
    {  
    SupplierBo supplierBo = new SupplierBo();  
    Supplier supplier = supplierBo.findById(id);  
    supplierBo.delete(supplier);   //调用下面的delete方法  
    }           public void delete(Supplier supplier)  
    {  
    try {  
    Session session = HibernateSessionFactory.currentSession();  
    Transaction transaction = session.beginTransaction();  
    session.delete(supplier);  
    transaction.commit();  
                            HibernateSessionFactory.closeSession();  
    } catch (HibernateException e) {  
    // TODO 自动生成 catch 块  
    e.printStackTrace();  
    }  
    }
    这样子理论上是通过的
    因为一般的处理可以归结为:
    Session session=HibernateSessionFactory.currentSession();
    Transaction ts=session.beginTransaction();
    try {
        .... //相关处理            
        ts.commit(); //提交
    } catch (Exception e) {
        if(ts!=null){
            ts.rollback(); //回滚
        }
    }finally{
        HibernateSessionFactory.closeSession();
    }
      

  6.   

    session.flush();
    然后ts.commit();