返回所有子项匹配条件的嵌套子项的HQL

时间:2013-02-22 17:59:06

标签: hibernate nhibernate hql criteria

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

谢谢, 帕瓦西

2 个答案:

答案 0 :(得分:0)

是的,你可以,但你也加了限制。

     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();

答案 1 :(得分:0)

有两种方法可以实现这一目标:

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

  2. 写一个递归逻辑,使数据库命中直到最后一个第二个孙子被提取。它不能用单一标准或HQL来完成。