Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 将GORM关系过滤到DTO对象中_Grails_Filtering_Gorm_One To Many_Dto - Fatal编程技术网

Grails 将GORM关系过滤到DTO对象中

Grails 将GORM关系过滤到DTO对象中,grails,filtering,gorm,one-to-many,dto,Grails,Filtering,Gorm,One To Many,Dto,我有一个用GORM构建的非常简单的模型,比如说一个类的父类和一个与类的子类的@OneToMany关系。子类具有“version”属性。模型大多是只读的,因为升级非常罕见。 我通过数据库中的条件查询来检索父对象,并且我也得到了它与子对象的所有关系(急切或懒惰并不重要)。所以在这一点上,我有一个父母和他的孩子 现在,我需要根据基于“version”属性的一些规则(例如:如果两个子对象具有相同的名称,则只有最新版本应位于关系集中),从父对象的关系集中动态筛选出一些子对象,并将结果传递给上层,以便进一步

我有一个用GORM构建的非常简单的模型,比如说一个类的父类和一个与类的子类的@OneToMany关系。子类具有“version”属性。模型大多是只读的,因为升级非常罕见。 我通过数据库中的条件查询来检索父对象,并且我也得到了它与子对象的所有关系(急切或懒惰并不重要)。所以在这一点上,我有一个父母和他的孩子

现在,我需要根据基于“version”属性的一些规则(例如:如果两个子对象具有相同的名称,则只有最新版本应位于关系集中),从父对象的关系集中动态筛选出一些子对象,并将结果传递给上层,以便进一步详细说明(可能再次访问数据库)

我正在评估两种方法:

1) DTO方法。我构建了一个DTO来过滤掉我不需要的东西,并将结果DTO对象传递给上层

2) 检索我需要的所有内容,分离对象,过滤掉子对象,并将分离的对象传递到上层

3) 一些我不知道的过滤功能,可以过滤给定属性或条件的关系


我认为第一个更安全,可以单独访问数据库,可以修改DTO对象,而不必冒在修改GORM实体时意外抛出异常的风险;但我想知道我是否正确,以及在处理分层应用程序时有什么建议,该应用程序必须在将对象/实体返回到上层之前对其进行修改。

如果我正确理解您的答案,我会创建一个简单的uni dir关系所有者,你是说我的查询应该更“精确”,而不仅仅是返回一个父项并在应用程序代码中过滤掉他的子项?首先获取父项,然后获取子项。你也可以仅使用父项的id来获取子项
def list = Ownee.withCriteria{
  projections{
    max 'version'
    groupProperty 'name'
  }
  eq 'owner', owner
}