2015-04-02 3 views
0

У меня есть два класса в моей модели: Contribution (commit) и Version (объект с версией в commit). Contribution hasMany Version и Version принадлежит To Contribution.Grails 2.4.4 добавляет элемент дважды к отношениям «один ко многим»

Когда я «фиксирую» новую версию, он создает новый вклад, новую версию и вклад .addToVersions (версия). Это делает что-то вроде:

1. contribution = new Contribution(...) 
2. newversion = new Version(contribution: contribution, ...) 
3..9. ... 
10. contribution.addToVersion(newversion) 

Если предыдущая версия существует для того же объекта, я: (это идет в ... предыдущего snipet)

3. if (Version.countByUid(newversion.uid) > 0) { 
4. prevVersion = Version.findBtUid(newversion.uid) 
5. prevVersion.lastVersion = false 
6. prevVersion.save() <<<< THIS IS ADDING THE newversion TO contribution.versions 
7. 
8. newversion.updateVersion() // updates the las part of the uid 
9. } 

Проблема заключается в том, когда я получите новую версию существующей версии, строка 6. добавляет новую версию к вкладу .versions (очень странно), а затем в строке 10. версия добавляется снова в эту коллекцию, поэтому я получаю дублированные элементы в качестве вклада. версии.

Любые идеи, почему это происходит? Почему сохранение другого экземпляра версии влияет на отношения новой версии и нового вклада?

Мое обходное решение состояло в том, чтобы просто выполнить addToVersions, если нет предыдущих версий, но я хочу знать, является ли это на самом деле ошибкой Grails, потому что это не имеет большого смысла.

ответ

0

Проблема заключалась в том, что связь между версией и вкладом является двунаправленной, поэтому, когда я устанавливаю version.contribution и сохраняю версию, версия автоматически добавляется Grails в список вкладов.

Так что если я также сделаю вклад .addToVersions, в итоге я добавлю версию дважды в список вкладов.

Возможные решения: не делать addToVersions или делать отношения однонаправленными.

Смежные вопросы