【问题标题】:HQL that returns nested children where all the children matches the conditionHQL 返回嵌套子代,其中所有子代都符合条件
【发布时间】:2013-02-22 17:59:06
【问题描述】:

我有一个类 Parent ,其中包含一对多的孩子。孩子是嵌套的,可以有 n 个作为深度。我想写一个hql,它将返回一个有孩子、孙子、曾孙等符合条件的父母。 我能够得到符合条件的孩子,但是当我调用 children.getChildren 时,它会返回不符合条件的大孩子。这可能吗?

谢谢, 帕瓦蒂

【问题讨论】:

    标签: hibernate nhibernate hql criteria


    【解决方案1】:

    有两种方法可以实现:

    1. 当您获取父类的对象时,通过在映射文件或实体级别指定 lazy = false 来延迟加载其子对象。就你的条件而言,你可以用你的编程语言编写逻辑(例如循环子对象)。

    2. 编写一个递归逻辑,使数据库命中直到获取最后一个第 n 个孙子。它无法通过单一标准或 HQL 来完成。

    【讨论】:

    • 非常感谢。这是我一直在寻找的答案。你认为在一对多的 g​​etchildren() 中添加 @Filter 也会有帮助吗?
    • @ParvathyMohan 如果您发现过滤器建议有帮助,请将其标记为答案。
    【解决方案2】:

    是的,你可以,但你也对它们添加了限制。

         criteria = session.createCriteria(YourClass.class);
                    criteria.add(Restrictions.eq
                    ("yourClassproperty", value));// //condition on parent
                    criteria.createAlias("children", "child");
                    criteria.createAlias("child.grandeChild", "grandChild");
                    criteria.add(Restrictions.or(Restrictions.eq
                    ("child.prop", value), Restrictions.
                    eq("grandChild.property", value)));
                    //Exmple restrictions on children
                    criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
                    return criteria.list();
    

    【讨论】:

    • 您好,感谢您的回答,但我的问题是孩子们的深度可以是 n
    • 您好,感谢您的回答,但我的问题是孩子的深度可以是 n。可以有子孙等。
    • 听上去用标准是不可能的。我们可以应用一个 for 循环,但至少我们必须知道循环在哪里结束。
    猜你喜欢
    • 2014-10-29
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2017-04-24
    相关资源
    最近更新 更多