我有一个用GORM构建的非常简单的模型,假设一个Class Parent和一个@OneToMany关系与一个Child类。子类具有“版本”属性。模型主要是只读的,因为升级是非常罕见的。 我从数据库中检索我的父对象whit条件查询,我也得到了与他的孩子的每一个关系(渴望或懒惰并不重要)。所以在这一点上,我和他的孩子有一个父母。
现在,我需要根据一些基于'version'属性的规则,从Parent对象的关系集中动态过滤出一些Child对象(例如:如果两个孩子的名字相同,只有最新的版本应该在关系集中),并将结果传递给上层,以便进一步详细说明(可能再次访问数据库)。
我正在评估2个approches:
1)DTO方法。我构建了一个DTO过滤掉我不需要的东西,并将结果DTO对象传递给上层。
2)检索我需要的所有内容,分离对象,过滤掉子项并将分离的对象传递给上层。
3)我不知道的一些过滤功能,可以根据某些属性或某些标准过滤关系
我认为第一个更安全,可以单独访问数据库,可以修改DTO对象,而不会在修改GORM实体时意外抛出异常;但是我想知道我是否正确以及在接近分层应用程序时需要修改对象/实体的建议,然后再将它们返回到上层。
答案 0 :(得分:0)
我会创建一个简单的uni-dir关系所有者< - Ownee,并使用简单Ownee
获取所有group by
个实例,例如criteria query
:< / p>
def list = Ownee.withCriteria{
projections{
max 'version'
groupProperty 'name'
}
eq 'owner', owner
}