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