2014-01-22 3 views
0

Как я могу сделать классы домена для создания таблиц в Grails, которые делят данные, но не «принадлежат» другому? Например, я хочу сделать 2 таблицы:Grails Many to Many Without Belongs To

Person Таблица 2 основных колонн
Имя - Навыки
Ларри - конкуру, смеясь, Штамповка
Керли - плач, смех
Моу - Штамповка, Танцы

Skill Таблица 2 основных колонн
Имя - Лица
Jumping - Ларри
Плач - завитые
Смех - Ларри, Керли
Штамповка - Ларри, Мо
Танцы - Moe

Удаление Skill также удаляет этот навык в таблице Person, при удалении Person также удаляет этот человек в Таблица навыков. Я попробовал класс домена ниже, но когда я создаю представления, я не могу вводить несколько Навыков для Человека и наоборот.

class Skill { 
String name 
Person person 
static hasMany = [person: Person] 

class Person { 
String name 
Skill skill 
static hasMany = [skill: Skill] 

Я посмотрел на другие должности, но решения часто имеют 3 или более классов (как правило, книги, автор, глава) и, кажется, очень сложно.

Заранее спасибо

+2

Попробуйте удалить 'Person person' из' Skill' и удалить 'Skill skill' из' Person' – micha

ответ

1

Я думаю, что вам нужно:

class Skill { 
    String name 
} 
class Person { 
    String name 
    static hasMany = [skills: Skill] 
} 

Grails создаст 3-й стол под названием что-то вроде PERSON_SKILL который будет person_id и skill_id в виде столбцов. При редактировании того, какие навыки у ваших объектов есть, вы действительно редактируете записи в этой третьей таблице.

Удаление записи человека приведет к удалению всех соответствующих записей person_skill для person_id.

Чтобы удалить запись об умении, сначала необходимо удалить все записи person_skill для skill_id, прежде чем запись умения будет удалена.

Эффективно, умение действует как статическая таблица данных, поэтому не требуется принадлежать другому объекту домена. Я использую несколько экземпляров этого в своих системах, и Grails/GORM автоматически генерирует таблицу ссылок obj1_by_obj2 для идентификаторов.

Я думаю, ваши взгляды/контроллеры/службы могут иметь дело с коллекцией person.skills (т. Е. Добавить, удалить), а затем оставить Grails, чтобы сохранить обновленную коллекцию в этой третьей таблице.

Отдайте это.

+0

Я пробовал это раньше, и я загрузил демонстрационное приложение, чтобы показать результат: http: // mongotest. ap01.aws.af.cm/ Но единственный способ связать навык каждого человека с объектом умения (и связать человека навыка с объектом человека) - это от многих до многих, у кого есть. Во всяком случае, я смотрю на MongoDB, чтобы узнать, будет ли это легче использовать для такой цели. –