我正在使用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/希望它能帮助你们可能需要像我这样的东西。