GORM/Grails — добавление дополнительного столбца в выражение joinTable

У меня есть настройка класса домена, подобная этой

class NewsStory {
  String headline
  static hasMany = [channels:Channel]
  static mapping = {
      table 'NewsStory'
      addresses joinTable:[name:'Article_Channel', key:'ArticleId', column:'ChannelId']
  }
}

в таблице Article_Channel мне нужно заполнить дополнительный столбец с именем ArticleType, скажем. Его значение всегда будет одинаковым, например. «новости» для этого класса домена, но будут отличаться для других, например. Канал «блог» — это что-то вроде «Безопасность» и т. д.

Есть ли способ? Спасибо


person AdiFatLady    schedule 23.10.2011    source источник


Ответы (1)


Одним из вариантов было бы создать свой собственный класс сопоставления «многие ко многим» и добавить туда поле.

http://grails.org/Many-to-Many+Mapping+without+Hibernate+XML

Так, например:

class ArticleChannel {
    NewsStory newsStory
    Channel channel
    String articleType
}

Тогда ваши классы NewsStory и Channel будут hasMany классом ArticleChannel.

person schmolly159    schedule 24.10.2011
comment
Спасибо за это. Как обойти ситуацию с куриным яйцом, когда статья нужна для создания элемента articlechannel до того, как элемент будет создан, т. е. элемент еще не доступен для articlechannel? - person AdiFatLady; 26.10.2011
comment
Я думал, что смогу указать составной ключ в NewsStory из id и articleType, но он не передает это в таблицу поиска. - person AdiFatLady; 26.10.2011
comment
Чтобы сохранить ссылку ArticleChannel до создания статьи, вы можете установить для свойства статьи значение nullable:true. Вам просто нужно запрограммировать свой код так, чтобы он запоминал идентификатор объекта ArticleChannel, чтобы позже заполнить его объектом статьи. Что касается составного идентификатора для отношений длиной 1 м, я не думаю, что это возможно, а если и возможно, то я не знаю, как это сделать. - person schmolly159; 26.10.2011