高级项目进行时8

1、 一个界面有一组checkbox和一个“删除”按钮,“删除”按钮只在checkbox组中有checkbox被选中的情况下点击才有效。如何实现?  经过尝试, 现将代码记录如下:

     //必须在选择了条目之后才可以删除
      function ChkBox(myform){                    
          n=document.all.chx.length; 
          var value="";   
          var flag=false;           
          for   (i=0;i<n;i++){                    
                  if   (document.all.chx[i].checked){
                  value=value + document.all.chx[i].value +",";
                    flag=true;
                     }
               }  
         
          if(flag){
          return window.location.href="deleteNews.action?paramValues="+value; 
          }               
            alert("请选择要删除的行");
            return false;  
           
       } 

//设置 “标志位”是一种非常有效的方式, 尤其是在进行逻辑分支选择的时候。

2、 spring的删除功能

        知道spring对hibernate进行了封装, 也曾多次使用spring封装的查询操作, 不过使用"删除"还是第一次。使用this.getHibernateTemplate().delete()弹出三个方法, 但其中的参数都要求有object。这样子我先前设想的通过“delete from x where x.y=?”这样的方式就不行了。 

     ————直接使用hibernate

  public void deleteSelectNews(long relation_emailid) {
  //由于spring只能删除对象,为了避免先查出对象再删除 直接使用hibernate
 
  Session session = this.getHibernateTemplate().getSessionFactory().openSession();
  try{
  String hql = "delete XRelationEmail where relationId =?";

  Transaction tx = session.beginTransaction();
  tx.begin();
  Query query = session.createQuery(hql);
        query.setParameter(0, relation_emailid);
  query.executeUpdate();
  tx.commit();
  
  }catch (Exception e) {
   System.out.println("删除操作失败:dao层");
   e.printStackTrace();
  }finally{
  session.close();
  }
 
 } 

 经测试, 删除成功。 但是假如删除的操作是处在spring的事物管理器中的话则还是得使用delete()这种方法。

   如果要删除的为集合的话则可采取:

  Collection<E>把所有查询结果entities 放进去,然后直接调用下面的方法
this.getHibernateTemplate().deleteAll(Collection)就是了

3、 今天尝试了一下如下的做法, 测试成功:

    select * from x_relation_email where relation_id in (1,2,null); 也可以正确执行
等同于
select * from x_relation_email where relation_id in (1,2);

   我之所以要做这样子的尝试是想让其具有“动态性”。 这种方式具有了一定的通用性,它的前提条件就是要能确定传进来的参数数组的长度, 如果长度也是不确定的那么这种方式仍然是不行的。

 

4、 异常: 6、 出现异常:
   org.hibernate.QueryException: Expected positional parameter count: 1, actual parameters: [] [delete XRelationEmail where relationId =?]

  后经自己排查, 发现原因:

   忘记设置   query.setParameter(0, relation_emailid);
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值