tags:

views:

34

answers:

0

Hello,

When I use criteria queries, the result contains array list of lazy initialized objects. that is, the list has values with handler org.codehaus.groovy.grails.orm.hibernate.proxy.GroovyAwareJavassistLazyInitializer. This prevent me from doing any array operation (minus, remove etc) in it. When I use, GORM methods, I get array list of actual object types. How can I get the actual objects in criteria query? The code is listed below.

  1. availableTypes = Type.withCriteria() {
    'in'("roleFrom", from) 'in'("roleTo", to) }

availableTypes (an array list) has one value , but not actual object but value with a handler of GroovyAwareJavassistLazyInitializer

  1. availableTypes = Type.findByRoleFrom(from)
    availableTypes (an array list) has values with type Type

---------- Update ----------
i did further troubleshooting, and this is what I found. Probably the above description might be misleading, but I kept it in case it helps.

  • When using findAllBy for the first time, I get proxy objects rather than the actual instance. Then, I invoke the method through an ajax call, the actual instance is loaded (anything to do with cache loading??). When I refresh the page, it again loads the proxy

def typeFrom = Type.findAllByParty(partyFrom)

  • there is another use of findAllBy in the same method, which always returns actual instances.

def relFrom = Relation.findAllByParty(partyFrom)

  • When compared the two classes, the attribute 'party' of class Roles is part of a 1-m relation. like

class Role { RoleType roleType
LocalDate validFrom
LocalDate validTo
static belongsTo = [party : Party ]
...
}

I know if I do statement like Party.findAll(), the role instances would be proxy till they access. But, when using gorm directly on the class (Role), why I am getting the proxy objects ???

thanks for the help.

thanks.