Проблема с несколькими полями, использующими одну и ту же таблицу соединений в отношении «один-много» - PullRequest
0 голосов
/ 20 июня 2019

Надеюсь, я объясню это достаточно просто для понимания людьми.

У меня есть класс домена:

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 с тем же идентификатором в базе данных, который все портит.

Есть идеи?

...