我有一个父类,其中包含一对多的子集。孩子们是嵌套的,可以有n个深度。我想写一个hql,它将返回一个父母与子女,孙子女,曾孙等符合条件。 我能够得到符合条件的孩子,但是当我打电话给children.getChildren时,它会返回与条件不符的大孩子。这可能吗?
谢谢, 帕瓦西
答案 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)
有两种方法可以实现这一目标:
当您获取Parent类的对象时,通过在映射文件或实体级别指定lazy = false
来延迟加载其子对象。就条件而言,您可以用编程语言编写逻辑(例如循环遍历子对象)。
写一个递归逻辑,使数据库命中直到最后一个第二个孙子被提取。它不能用单一标准或HQL来完成。