Честно говоря, stackoverflow предназначен для вопросов и ответов, а не "сделай это для меня".
Ваш вопрос о том, как отобразить многие-ко-многим, действителен, и один очень распространенный способ - просто объединитьтаблица, содержащая оба отношения.
Примером, который вы можете перепроектировать для соответствия вашим классам, является класс UserRole из spring-security-core.
class UserRole implements Serializable {
User user
Role role
static UserRole get(long userId, long roleId) {
find 'from UserRole where user.id=:userId and role.id=:roleId',
[userId: userId, roleId: roleId]
}
static UserRole create(User user, Role role, boolean flush = false) {
new UserRole(user: user, role: role).save(flush: flush, insert: true)
}
static boolean remove(User user, Role role, boolean flush = false) {
UserRole instance = UserRole.findByUserAndRole(user, role)
if (!instance) {
return false
}
instance.delete(flush: flush)
true
}
static void removeAll(User user) {
executeUpdate 'DELETE FROM UserRole WHERE user=:user', [user: user]
}
static void removeAll(Role role) {
executeUpdate 'DELETE FROM UserRole WHERE role=:role', [role: role]
}
static mapping = {
id composite: ['role', 'user']
version false
}
}
Удалены некоторые вспомогательные элементы, такие как хеш-коды и клоныи т. д.
Основная идея заключается в том, чтобы иметь таблицу соединений, содержащую идентификатор обоих ваших классов.