如何在Grails with Criteria中包含投影中进行"deep"转换?



我正在使用Grails 2.2.4来构建Web应用程序,现在我在Grails withCriteria操作方面遇到了一个复杂的问题。我有3个班级,如下所示:

class Person {
    int id
    String name
    Set<Car> cars = []  // One-to-many relationship
    Company currentCompany // One-to-one relationship
}
class Car {
    int id
    String manufacturer
    String brand
    double price
    Person owner
}
class Company {
    int id
    String name
    Set<Person> employees = []
}

现在我想从 Person 作为根类查询数据以及相关的数据,如下所示:

List result = Person.withCriteria {
    projections {
        property('id')
        property('name')
        createAlias('cars', 'c', CriteriaSpecification.LEFT_JOIN)
        property('c.brand')
        createAlias('currentCompany', 'com', CriteriaSpecification.LEFT_JOIN)
        property('com.name')
    }
        lt('id', 10L)
        resultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
}

问题是,我不知道如何将结果数据深度转换为人员列表,以确保每个元素都包含其数据作为类结构。我尝试了很多方法,例如

    resultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
    resultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP)
    resultTransformer(CriteriaSpecification.aliasToBean(Person.class))  

但没有任何效果如我预期的那样。
Grails 2.2.4 是否支持此功能?如果是,那么正确的语法是什么?
非常感谢。

实际上,在研究了许多文章,Grails文档甚至其源代码之后,我认为最好的方法是为我自己的目的实现一个自定义转换器。这里最困难的事情是如何将数据转换为关联对象,并将它们收集到根实体内的集合中。我在这里创建了一个:
http://www.mycodestock.com/code/10333/希望它能帮助你们可能需要像我这样的东西。

相关内容

  • 没有找到相关文章

最新更新