项目中遇到的 传一个IN参数问题 比如说一个SQL文中  SELECT * FROM EMP WHERE EMP.ID IN ('1','2','3');要转成JPQL 因为我们项目中是不让写定值的 所以参数要通过参数的形式传进去写点伪代码 项目的带不出来 见谅 // 本人菜鸟 家里没环境 用记事本写的 很糙 见谅
public class Test{
    // 参数拼装在一起
    public String parameter(List<String> list){
       StringBuffer sb = new StringBuffer();
       for(T t :list){
          if(t == null){
              sb.append(“,”);
          }
          sb.append(“‘”);
          sb.append(“t”);
          sb.append(“’”);
       }
       return sb.toString();
    }    public static void main(){     
          //参数传进LIST   
          List<String> list = new Array<String>();
          list.add("1");
          list.add("2");
          list.add("3");
          //SELECT * FROM EMP WHERE EMP.ID IN ('1','2','3');
          //拼上面的SQL 太麻烦不写了 
          StringBuffer sb = new StringBuffer();
          sb.append(“SELECT * FROM EMP WHERE EMP.ID IN (:aa)”)
          Query q = em.createQuery(sb.toString());
          //将参数传进去 
          q.setParameter("aa",parameter(list));
    }
}但是这样做太麻烦 这样看还可以 但是一旦参数多了 或者参数类型成为框架不能控制的时候
还需要做参数的转换  会很麻烦 
我觉得JPQL是不是也想ibatis 一样 支持多个参数同时传递啊 
求助各位大侠 在线等~

解决方案 »

  1.   

    这怎么能这样呢?
      sb.append(“SELECT * FROM EMP WHERE EMP.ID IN (:aa)”)在hibernate中,有一个方法叫做query.setParameterList("aa", praList);
    在jpql中也应该有类似的方法吧,就是为了处理你的这种问题的。
      

  2.   


    不好意思 我知道不能这样写 拼太麻烦了 简单写的 JPQL也是支持的  但是问题是IN多个参数 要用一个变量传进去
      

  3.   

    多参数 传递,使用detachcriteria(hibernate中),jpql中使用queryBuilder,一般来说
    ,即使使用setParameter("aa",xxx),在内部实现中,对自动根据xxx的类型判断,在内部是使用普通的setparameter还是使用setParameterList的。
    比如hibernate就是这样,即在使用setParameterList的地方,也是可以使用setParameter来代替的,它根据的是传递的值的类型来作判断的。
      

  4.   


    我知道hibernate 中传多个值 可以使用setParameterList 但是JPA中没有类似的方法  
    我查了下资料 不太能理解queryBuilder