Избегать соединения таблицы в граалях - PullRequest
0 голосов
/ 10 апреля 2019

Учитывая следующую упрощенную ситуацию: у меня есть продукт, который может иметь несколько атрибутов, а значения атрибутов зависят от страны.

Когда я моделирую классы домена атрибутов стандартным образом, он выглядит так, как показано ниже,Это означает, что атрибут может иметь значения, которые зависят от страны, и значение может принадлежать различным атрибутам.Отношение n: m приводит к отдельной таблице соединений.

class Attribute  {
    String id
    String name

    static hasMany = [attributeValues: AttributeValue]

    static mapping = {
        attributeValues joinTable: [name: 'attribute_values', key: 'attribute_id']
    }
}


class AttributeValue {
    String id
    Locale language
    String value
}

Вопрос теперь в том, есть ли способ смоделировать это в GORM без таблицы соединений?

При использовании нативного SQLне проблемаВ базе данных это приведет к структуре, как показано ниже.Соединение должно идти от столбца attribute.attribute_key к столбцу attribute_value.attribute_key

enter image description here

1 Ответ

1 голос
/ 11 апреля 2019

объединить таблицу в базе данных

create view JOIN_ATTRIBUTE_VALUE_V as
(!!the sql u select upown!!)

, а затем создать класс grails.domain

class joinAttributeValueV {
    String id
    String attributeKey
    Locale language
    String value

    static mapping = {
        table 'JOIN_ATTRIBUTE_VALUE_V'
        id            column:"id" ,comment:""
        attributeKey  column:"ATTRIBUTE_KEY" ,comment:""
        language      column:"LANGUAGE" ,comment:""
        value         column:"VALUE" ,comment:""
    }
}

Использовать GORM для получения класса домена

...