【问题标题】:Get objects form database using hibernate with two list as parameters使用带有两个列表作为参数的hibernate从数据库中获取对象
【发布时间】:2016-06-08 04:28:39
【问题描述】:

我正在尝试从数据库迭代两个集合中获取结果,如下所示

for (SomeType element1 in List1) {
    for (SomeType2 element2 in List2) {
        Query query = session.createQuery("from Table where column1 =: element1 and column2 =: element2");
        //Operations on list of results
    }
}

我怎样才能以最佳性能做这样的事情?在我的应用程序中,list1 有 200 个元素,而 list2 大约有 30 个元素,这需要太多时间。

【问题讨论】:

  • 这对性能来说太可怕了。给定列表大小,您正在执行 200 * 30 个查询。请改用 HQL IN 子句。
  • 我可以在一个查询中使用两个 HQL 'ins' 吗?例如:from Table where column1 in (:list1) and column2 in (:list2)

标签: java sql performance hibernate


【解决方案1】:

你可以试试:

Query query = session.createQuery("from Table where column1 IN (:List1) and column2 IN (:List2)");

【讨论】:

    【解决方案2】:

    不完美,但可以胜任:

    StringBuilder sb = new StringBuilder("(");
    for (SomeType element1 in List1) {
        for (SomeType2 element2 in List2) {
            sb.append(element1).append(',').append(element2).append("),");
        }
    }
    // delete the last ','
    sb.setLength(sb.length() - 1);
    Query query = session.createQuery(
      "from Table where (column1, column2) in ("+sb.toString+")"
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-24
      • 1970-01-01
      • 2013-04-13
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      相关资源
      最近更新 更多