Question

I am using Grails 2.2.4 to build a web application, and now I am having a complex problem with Grails withCriteria operation. I have 3 classes as below:

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 = []
}

And now I want to query data from Person as root class along with associated data like this:

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)
}

And the problem is, I don't know how to transform deeply the result data to a List of persons to make sure every single element contains its data as the class structure. I tried many methods like

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

but nothing worked as I expected.
Does Grails 2.2.4 support this? If yes so what is the correct syntax?
Thank you so much.

No correct solution

OTHER TIPS

Actually, after researching many articles, Grails documentation and even its source code, I think the best way to do this is implementing a custom transformer for my own purpose. The most difficult thing here is how to transform data to association objects and gather them to collection inside the root entity. And I have created one here: http://www.mycodestock.com/code/10333/
Hope it helps you guys who may need something like mine.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top