Надеюсь, я объясню это достаточно просто для понимания людьми.
У меня есть класс домена:
class SearchRequirement extends Requirement {
List<SearchTagRequirement> tags;
List<SearchLegRequirement> legs;
static hasMany = [tags: SearchTagRequirement, legs: SearchLegRequirement];
static mapping = {
tags(cascade: 'all', joinTable: [name: 'associations', key: 'parent_requirement_id', column: 'requirement_id'], indexColumn: 'order_idx');
legs(cascade: 'all', joinTable: [name: 'associations', key: 'parent_requirement_id', column: 'requirement_id'], indexColumn: 'order_idx');
}
}
Все классы требований используют одну и ту же таблицу requirement
(с классомколонка дискриминатора).Он использует таблицу associations
как способ создания иерархии требований, вложенных в другие требования.
Проблема этого подхода заключается в том, что таблица associations
предварительно запрашивается для заполнения количестваэлементы в tags
и legs
, но в этой таблице нет никакой информации о том, является ли строка на самом деле SearchTagRequirement
или SearchLegRequirement
(эта информация находится в таблице requirement
).
Так что, если у вас есть SearchTagRequirement, он также думает, что у него есть SearchLegRequirement с тем же идентификатором в базе данных, который все портит.
Есть идеи?