我有一个有一对多孩子的班级家长。孩子是嵌套的,可以有 n 个作为深度。我想写一个 hql,它将返回一个有孩子、孙子、曾孙等符合条件的父母。我能够得到符合条件的孩子,但是当我调用 children.getChildren 时,它会返回不符合条件的大孩子。这可能吗?
谢谢, 帕瓦西
我有一个有一对多孩子的班级家长。孩子是嵌套的,可以有 n 个作为深度。我想写一个 hql,它将返回一个有孩子、孙子、曾孙等符合条件的父母。我能够得到符合条件的孩子,但是当我调用 children.getChildren 时,它会返回不符合条件的大孩子。这可能吗?
谢谢, 帕瓦西
是的,您可以,但是您也对它们添加了限制。
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();
有两种方法可以实现这一点:
lazy = false
当您获取父类的对象时,通过在映射文件或实体级别指定来延迟加载其子对象。就你的条件而言,你可以用你的编程语言编写逻辑(例如循环子对象)。
编写一个递归逻辑,使数据库命中直到获取最后一个第 n 个孙子。它不能用单一标准或 HQL 来完成。