Является ли объявление переменной в граалях таким же, как и в отношении отношения ownTo? - PullRequest
0 голосов
/ 17 сентября 2010

Я пытаюсь настроить несколько классов домена.Я объясню это на английском, и мне интересно, как домен будет установлен в Grails.Слова с заглавной буквы - мои домены

Сотрудник имеет образование.Работник имеет много работодателей (прошлых и настоящих).Сотрудник имел один или несколько проектов для каждого работодателя.У проекта есть роль, клиент ... и т. Д.

Теперь мой вопрос, например, когда я определяю работодателя, я поставлю

 hasMany = [projects:Project]

и ТАКЖЕ в Project поставлю

 belongsTo = [employer:Employer, employee:Employee, client:Client]

Имейте в виду - многие сотрудники, возможно, работали над одним и тем же проектом, поэтому я мог бы найти способ определить это?

Могу ли я также указать в Employer:

  ArrayList<Project> project = new ArrayList();
  static hasMany = [projects:Project]

Или это избыточно?

Ответы [ 2 ]

1 голос
/ 18 сентября 2010

Это избыточно, но ваш пример не совсем соответствует тому, что вы описываете. По умолчанию, когда вы определяете hasMany, Grails создаст Set. То, что будет делать ваш код, это использовать ArrayList вместо Set, но отношения точно такие же. Я предполагаю, что вы хотели, чтобы ваш проект ArrayList фактически был множественным (проект s ).

Кроме того, просто примечание, вы всегда должны использовать Интерфейс, чтобы объявить ваши типизированные переменные, а не реализацию:

List<Project> projects = new ArrayList<Project>()
1 голос
/ 18 сентября 2010

Объявление переменной не аналогично определению отношения belongsTo. belongsTo в основном вступает в игру с каскадом постоянных действий, особенно удаляет. Например, если у вас есть два класса:

// Employee.groovy
Project project

// Project.groovy
static belongsTo = Employee

Если конкретный Проект принадлежит Сотруднику, и этот Сотрудник удален, Проект будет также удален. Вот еще один SO вопрос с хорошим ответом.

Для вашего второго вопроса, да, определение List является излишним. Если вы делаете:

static hasMany = [projects: Project]

Коллекция неявно определена для домена. Однако в некоторых случаях вам может понадобиться инициализировать коллекцию для использования в constraints. Подробнее см. в этом выпуске .

...