hibernate - Grails N+1 query -


my grails app uses spring security , has usual user, userrole, , role classes. way these classes modelled little unusual, in there no hasmany mappings in either user or role. instead classes referenced solely through userrole.

class userrole implements serializable {   user user   role role } 

my understanding relationship has been modelled performance reasons, specifically, reduce possibility of n+1 queries.

in 1 part of application need load users , roles. conscious of aforementioned problem, tried this:

def usersbyrole = userrole.createcriteria().list {   fetchmode("user", fetchmode.join)   fetchmode("role", fetchmode.join) } 

however when try access user objects

usersbyrole.each { it.user } 

a separate query issued retrieve data user table, i've run problem trying avoid. tried following, suffers same problem.

def usersbyrole = userrole.createcriteria().list {   fetchmode("user", fetchmode.select)   fetchmode("role", fetchmode.select) } 

i should confess i'm not altogether clear on the difference between fetchmode.join , fetchmode.select, if set me straight on that, it'd appreciated.

i tried several combinations had same results - if @ generated sql there's no join in original query, has queries load users , roles.

others have had issues domain class - looks there's bug in gorm composite key made of domain classes, or that. people satisfied hql workaround, , luck :)

def usersbyrole = userrole.executequery(    'select ur userrole ur ' +    'left join fetch ur.user ' +    'left join fetch ur.role') 

Comments

Popular posts from this blog

c# - DetailsView in ASP.Net - How to add another column on the side/add a control in each row? -

javascript - firefox memory leak -

Trying to import CSV file to a SQL Server database using asp.net and c# - can't find what I'm missing -