【问题标题】:hibernate how to assign ParameterList for the IN clausehibernate如何为IN子句分配ParameterList
【发布时间】:2014-08-15 15:16:32
【问题描述】:

我需要在 SQL 语句中使用 IN 子句。 我在一个表中有 Int(11) 类型的数据。

并且 Y 有一个来自另一个表的字符串作为条件。

例如,在表 A 中,我的值为 3,类型为 Int。 在表/进程 B 中,我有字符串“0123”。

我需要查询表 A 以满足此条件: Select * from Table A where attrib_1 IN (0,1,2,3)

因为记录 n 的值为 3,所以应该返回它。

所以我尝试使用.setParameterList,像这样:

        List<BloqueCruzamiento> bloques = session.createQuery("FROM BloqueCruzamiento AS b WHERE b.anio=:anio AND b.activo=true AND b.grupo=:categoria AND b.pr IN(:pr_set)ORDER BY b.nroParcela, b.cruza, b.pedigree")
                                .setParameter("anio", grupo.getAnio())
                                .setParameter("categoria", grupo.getCategoria())
                                .setParameterList("pr_set", pr_parm)
                                .list();

quid 在“pr_set”参数上。 我想知道如何将 String "0123" 转换为整数集合 (0,1,2,3)。

所以我可以将此参数传递给 setParameterList() 方法。

我现在的一种方法是将字符串转换为字符数组,然后循环,并将每个元素转换为整数数组。

有人可以提供另一种解决方案吗?

问候

【问题讨论】:

    标签: sql hibernate in-clause


    【解决方案1】:

    您可以使用下面的代码从字符串中获取列表

      String s = "0123";
            List<Integer> pr_parm = new ArrayList<Integer>();
                for(int i=0;i<s.length();i++) {
                  if (Character.isDigit(s.charAt(i))) {
                      pr_parm.add(Integer.parseInt(String.valueOf(s.charAt(i))));
                  }
              }
              System.out.println(pr_parm);
    

    然后你可以使用setParameterList("pr_set", pr_parm)中的列表

    【讨论】:

    • 谢谢!我用完了你的解决方案的替代品。
    【解决方案2】:

    这就是解决方案。

    String[] sele = grupo.getPr_sel().split(",");
        Integer[] pr_parm_int = new Integer[sele.length];
        for (int x=0; x<sele.length;x++){
            pr_parm_int[x] = Integer.valueOf(sele[x]);
        }
    

    第一行是解析字符串,去掉逗号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2023-04-09
      • 2019-04-01
      • 1970-01-01
      • 2014-09-10
      • 1970-01-01
      • 2021-05-15
      相关资源
      最近更新 更多