Basically, you need to change the mapping so that the M: M relation is expressed as two 1: M. relations. Here is an example where the join class is BadgeOwner (therefore, by default the generated join table will be called badge_owner )
class Badge { static hasMany = [owners: BadgeOwner] } class User { static hasMany = [owners: BadgeOwner] } class BadgeOwner { static belongsTo = [user: User, badge: Badge] Date dateCreated Date lastUpdated }
source share