In my previous Grails project(high transaction volume), I had horrifying experience with Stale Object Exceptions with 1 to many and many to many relationships.
I was basically persisting Facebook friends profile (entire profile with School, Employers) and most of the times i was saving 1000 user profiles together. I solved most of the issues by removing version no from School and Employer domain class because that data is mostly fixed and there was no need to increment version for every save of experience or education. Because of tight schedules, i had to make things work and i removed version no from entire user object hierarchy because i still used to get some Stale object Exceptions.
So, i am still in dark on when not use version in domain classes?
I don’t necessarily think it’s versions that are your problems, its the way that grails handles collections by default. The way hasMany and belongsTo work out of the box ends up loading a LOT more than you almost ever need from the DB (thus leading to a lot more things that are going to be stale).
Burt Beckwith does a much better job than I can in this video on Advanced GORM which I’d highly recommend watching.