GRAILS Несколько составных внешних ключей, совместно использующих одно поле таблицы? - PullRequest
1 голос
/ 09 сентября 2011

Я пытаюсь использовать Grails с существующим устаревшим БД старого стиля. У меня есть составные ключи везде (PK и FK) и ... больше FK, разделяющих тот же столбец таблицы. Пример:

Все таблицы имеют общее значение "company".

class SalesOrder implements Serializable{

...
static hasMany = [items: SalesOrderItem]

static mapping = {
    table 'MYORDERTABLE'
    id composite: ["company", "orderId"], generator: "assigned"

Чем мои позиции заказа на продажу:

class SalesOrderItem implements Serializable{
     ....
     Material mat

     static belongsTo = [order: SalesOrder]

     static mapping = {

    table 'MYORDERITEMSTABLE'
    id composite: ["order", "lineNumber"], generator: "assigned"
    lineNumber column: 'ITEMNUMBER'

        columns { 
           order { column name:'COMPANY'
           column name:'ORDERNUMEBR' }
        }

Весь предыдущий код работает (только с граалями 2.0 M1). Мой "заказ" имеет составной PK (company + orderId), мой "orderLine" имеет составной PK (company + orderId + orderLineId).

Проблемы возникают, когда у меня есть другие атрибуты с составными ключами, которые разделяют атрибут «company» как один элемент FK, например

columns{    
    mat {   column name: 'COMPANY', insertable:false, updateable:false
    column name: 'MATTYPE'
            column name: 'MATCODE'
            column name: 'MATCODEEXT1'
            column name: 'MATCODEEXT2'
         } 
 }

Это не работает, появляется ошибка

Repeated column in mapping for entity: SalesOrderItem 
column: COMPANY (should be mapped with insert="false" update="false")

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

У вас есть предложения? Подсказка? Решение? Любая помощь приветствуется?

Спасибо, Lorenzo


Обновление

Я нашел следующий пост, в основном с тем же вопросом о гибернации:

должен-зимуют-быть в состоянии к ручке-перекрывающей-ВНЕШНЕПОЛИТИЧЕСКИЕ ключи

и кажется, что это все еще нерешенная проблема:

Спящий джира

нет гибернации, нет гормона, я полагаю. Что касается обходного пути, я думаю об использовании событий aferLoad, beforeInsert, beforeUpdate для загрузки / обновления классов домена, связанных с этим FK.

...