当前位置: 首页 > 知识库问答 >
问题:

对父级执行createCriteria(),在该父级中计算子级及其属性

吕岳
2023-03-14
class Parent {
    Long id
    static hasMany = [ children: Child ]
}

class Child {
    Long id
    static belongsTo = [ parent: Parent ]
}

如何选择以下条件:

  1. 选择不带子项的所有父项
  2. 选择所有父级和子级
  3. 选择带有雄性子项的所有父项(因此,当通过作为JSONgroovy类型转换转换为JSON时,只应包括雄性子项)

我不知道如何开始编码1和2,也许与child.size()有关--我真的不知道。虽然我在第3章的想法是:

ArrayList<Parent> PARENTS_WITH_SON = Parent.createCriteria().list {
    children {
        eq("gender", "male")
    }
}

但问题是,当转换为JSON时,它包含了非男性条目。有谁能帮我解决问题吗?使用createCriteria()会很好,但也可以在HQL中使用。

共有1个答案

乐成济
2023-03-14

1和2是非常简单的:

1.选择不带子级所有父级

Parent.createCriteria().list {
    sizeEq("children", 0)
}

2.选择所有父级和子级

Parent.createCriteria().list {
    sizeGt("children", 0)
}
Parent.createCriteria().listDistinct {
    children {
        eq("gender", "male")
    }
}
/*
  create a new Grails Criteria that internally will use
  Hibernate's org.hibernate.Criteria.
*/
List<Map<String, Object>> resultList = Parent.createCriteria().list {
    /*
     Set a strategy for handling the query results.
     This determines the "shape" of the query result.

     See org.hibernate.Criteria.setResultTransformer(...)

     CriteriaSpecification.ALIAS_TO_ENTITY_MAP transformer will transform the results into a Map<String, Object>
    */
    resultTransformer(org.hibernate.criterion.CriteriaSpecification.ALIAS_TO_ENTITY_MAP)

    /*
     Join an association using the specified join-type, 
     assigning an alias to the joined association.

     org.hibernate.Criteria.createAlias(...)
    */
    createAlias("children", "child", JoinType.INNER_JOIN);

    projections {
        property("id", "parentId")
        property("child.id", "childId")
        property("child.gender", "gender")
    }

    eq("child.gender", "MALE")
}
[
  {
    "childId": 1,
    "gender": "MALE",
    "parentId": 2
  },
  {
    "childId": 3,
    "gender": "MALE",
    "parentId": 2
  },
  {
    "childId": 4,
    "gender": "MALE",
    "parentId": 3
  },
  {
    "childId": 5,
    "gender": "MALE",
    "parentId": 3
  }
]
 类似资料:
  • 问题是要确定子数据的总和是否等于父数据。如果是,返回真,否则返回假。 下面是我的代码,在提交时出现错误。我知道这是一个简单的问题,但在编写了条件之后,我很难通过遍历所有左右节点来递归检查二叉树中每个节点的和条件。 请指导我,因为我哪里做错了。

  • 我有一张卡片,它由页眉、正文和页脚组成,可以由更多节点组成,如标签、文本字段等。 我需要抓住鼠标点击事件的任何时间,当点击发生在卡内,无论它是卡本身还是其子卡之一。现在,如果我单击文本字段,事件不会被触发。 就像上面的例子一样,如果我单击文本字段来键入某些内容,未打印。

  • 问题内容: 在下面的函数中,我获得带有属性的textarea对象。 此处,嵌套解构使用和变量。但是变量不起作用。 问题答案: 第一个解构仅创建和变量。如果要创建为变量,则需要再次声明。 您可以在Babel编译器上对其进行测试: 这段代码: 被转移到: 如您所见,未创建变量。

  • 问题内容: 在我的应用中,我必须经常在两种布局之间切换。错误在下面发布的布局中发生。 第一次调用布局时,没有发生任何错误,一切都很好。然后,当我调用不同的布局(空白),然后再次调用我的布局时,出现以下错误: 我的布局代码如下所示: 我知道之前曾有人问过这个问题,但对我来说没有帮助。 问题答案: 错误消息说明你应该做什么。

  • 我有两个组成部分: 父组件 子组件 我试图从Parent调用child的方法,我尝试了这种方法,但无法得到结果: 有没有办法从父级调用子级的方法? 注意:子组件和父组件在两个不同的文件中。

  • 我有两个实体使用Spring和Hibernate