将GORM关系过滤为DTO对象

时间:2015-03-17 16:26:25

标签: grails filtering gorm one-to-many dto

我有一个用GORM构建的非常简单的模型,假设一个Class Parent和一个@OneToMany关系与一个Child类。子类具有“版本”属性。模型主要是只读的,因为升级是非常罕见的。 我从数据库中检索我的父对象whit条件查询,我也得到了与他的孩子的每一个关系(渴望或懒惰并不重要)。所以在这一点上,我和他的孩子有一个父母。

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

我正在评估2个approches:

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

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

3)我不知道的一些过滤功能,可以根据某些属性或某些标准过滤关系

我认为第一个更安全,可以单独访问数据库,可以修改DTO对象,而不会在修改GORM实体时意外抛出异常;但是我想知道我是否正确以及在接近分层应用程序时需要修改对象/实体的建议,然后再将它们返回到上层。

1 个答案:

答案 0 :(得分:0)

我会创建一个简单的uni-dir关系所有者&lt; - Ownee,并使用简单Ownee获取所有group by个实例,例如criteria query:< / p>

def list = Ownee.withCriteria{
  projections{
    max 'version'
    groupProperty 'name'
  }
  eq 'owner', owner
}