Java hql查询以获取以父表id为键、子对象列表为值的映射

Java hql查询以获取以父表id为键、子对象列表为值的映射,java,map,hql,Java,Map,Hql,有两个具有外键关系的表parent和child。现在,我的要求是编写hql,它返回一个映射,其中键作为父表id,值作为子对象列表。OK。你似乎完全迷路了,所以我会这样做: String hql = "select distinct p from Parent p" // get all the parents + " left join fetch p.children"; // with their children List<Parent> parents =

有两个具有外键关系的表parent和child。现在,我的要求是编写hql,它返回一个映射,其中键作为父表id,值作为子对象列表。

OK。你似乎完全迷路了,所以我会这样做:

String hql = 
    "select distinct p from Parent p" // get all the parents
    + " left join fetch p.children";  // with their children
List<Parent> parents = session.createQuery(hql).list();

// now transform this list of parents into a Map
Map<Long, List<Child>> result = new HashMap<Long, List<Child>>(parents.size());
for (Parent parent : parents) {
    result.put(parent.getId(), parent.getChildren());
}

请注意,我没有真正看到这张地图的意义。如果您有家长列表,每个家长都包含自己的孩子,那么不需要地图。

好的。你似乎完全迷路了,所以我会这样做:

String hql = 
    "select distinct p from Parent p" // get all the parents
    + " left join fetch p.children";  // with their children
List<Parent> parents = session.createQuery(hql).list();

// now transform this list of parents into a Map
Map<Long, List<Child>> result = new HashMap<Long, List<Child>>(parents.size());
for (Parent parent : parents) {
    result.put(parent.getId(), parent.getChildren());
}

请注意,我没有真正看到这张地图的意义。如果你有父母的名单,每个人都有自己的孩子,那么地图就没有必要了。

Cool。你的问题是什么?您尝试了什么?我想要一个包含键作为父id和值作为子对象列表的映射。目前我正在考虑类似这样的事情:选择parentid,COUNT*FROM CHILD,其中parentid在按parentid选择parentid FROM parent组中;我们可以在一个查询中完成它,还是需要两个查询?如果您想要子项列表,为什么要选择计数?你为什么有where条款?这是完全不必要的,因为子对象中的avery parentID应该为null或是有效的父对象ID。您真正想要返回什么。显示method.Cool返回值的类型。你的问题是什么?您尝试了什么?我想要一个包含键作为父id和值作为子对象列表的映射。目前我正在考虑类似这样的事情:选择parentid,COUNT*FROM CHILD,其中parentid在按parentid选择parentid FROM parent组中;我们可以在一个查询中完成它,还是需要两个查询?如果您想要子项列表,为什么要选择计数?你为什么有where条款?这是完全不必要的,因为子对象中的avery parentID应该为null或是有效的父对象ID。您真正想要返回什么。显示方法返回值的类型。非常感谢。是的,我真的迷路了。我找到了解决办法。谢谢你,这太完美了。是的,我真的迷路了。我找到了解决办法。