【问题标题】:Java Iterating over HQL result with multiple tables使用多个表对 HQL 结果进行 Java 迭代
【发布时间】:2014-05-28 06:48:43
【问题描述】:

比如说,使用 hql,我从四个表中进行选择 (t1, t2, t3, t4)

这就是我的 hql 的样子:

String multiTableHql = "from tbl1, tbl2, tbl3, tbl4"; // omitting  filtering
Query mtq = myDao.getInstance().getSession().createQuery(multiTableHql);

现在,我的理解是,调用 mtq.list() 显然会带来一个对象列表,其中每个对象的属性都是这些表。

我将如何遍历该列表,以便我可以单独获取每个表?

我试过 Iterator, ArrayList 显然没有成功。可能是我做错了。

请建议我一个正确的方法来做到这一点。提前致谢。

【问题讨论】:

    标签: java hibernate iterator hql criteria


    【解决方案1】:

    你的这个查询实际上是一个笛卡尔积。因此,如果所有表都有 1000 行,您将获得 1000 * 1000 * 1000 * 1000 = 1 万亿个结果。

    如果我们谈论的是 ToOne 关联,您最好使用 SQL 或 HQL 加入它们(如果您有从 t1 到 t2 到 t3 到 t4 的可导航映射)。

    如果这些是 ToMany 关联,加入您将获得笛卡尔积,在这种情况下,4 个不同的选择将为您获得 4 * 1000 个结果(优于 1 万亿)。

    【讨论】:

    • 实际上,我用这些选择做了很多过滤,我的结果只有 15 个元组。我正在尝试找到一种方法来迭代该笛卡尔积并挑选出表格。
    猜你喜欢
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多