Исключение при отображении при использовании дискриминатора в Grails 2.0.0 - PullRequest
1 голос
/ 10 января 2012

В общем, у меня проблема с отображением: org.hibernate.MappingException: Repeated column in mapping for entity: os.comida.StoreDocumentRw column: Type (should be mapped with insert="false" update="false")

Чтобы представить проблему: у меня есть много типов документов, где каждый тип документа немного отличается от любого другого.Все они имеют общие свойства: дата, номер, издатель и т. Д. Поэтому я решил хранить все типы документов в одной физической таблице (один - это очень важно для меня).Для реализации этого я хотел использовать дискриминатор гибернации.

Ниже я вставляю свой исходный код.У меня есть базовый класс StoreDocument и два типа документов StoreDocumentRw и StoreDocumentWz.

class StoreDocument {

    String type
    Date documentDate

    static mapping = {
        table '"StoreDocument"'
        version false
        id column:'"StoreDocumentID"', generator:'sequence', params:[sequence:'STORE_DOCUMENT_SEQ']
        discriminator column: '"Type"'
        documentDate column:'"DocumentDate"'
        type column:'"Type"'
    }    

}

class StoreDocumentRw extends StoreDocument {

    String rwSpecificData

    static mapping = {
        discriminator value: 'rw'
        rwSpecificData column:'"RwSpecificData"'        
    }
}

class StoreDocumentWz extends StoreDocument {

    String wzSpecificData

    static mapping = {
        discriminator value: 'wz'
        wzSpecificData column:'"WzSpecificData"'
    }
}

И когда я пытаюсь запустить приложение, я упоминал ранее org.hibernate.MappingException: Repeated column in mapping for entity: os.comida.StoreDocumentRw column: Type (should be mapped with insert="false" update="false")

Когда я добавляю type insertable: false, updateable: false к StoreDocumentRw отображению, он все тот же.

Когда я добавляю type insertable: false, updateable: false к StoreDocument отображению, это еще хуже:

ERROR hbm2ddl.SchemaExport  - Unsuccessful: create table COMIDA2."StoreDocument" ("StoreDocumentID" number(19,0) not null, "DocumentDate" timestamp not null, "Type" varchar2(255 char), "Type" varchar2(-1 char) not null, "WzSpecificData" varchar2(255 char), "RwSpecificData" varchar2(255 char), primary key ("StoreDocumentID"))
ERROR hbm2ddl.SchemaExport  - ORA-00957: duplicate column name

Так что я не знаю, куда мне поместить эту вставляемую / обновляемую вещь, чтобы она работала,Я использую Grails 2.0.0 и Oracle 10g.Кто-нибудь может сказать мне, что не так с моим кодом?


Решение:

Мое отображение в StoreDocument было неверным.Достаточно вырезать String type и type column:'"Type"' и редактировать отображение дискриминатора следующим образом discriminator column:[name:'"Type"',length:50], что в результате дает:

class StoreDocument {

    Date documentDate

    static mapping = {
        table '"StoreDocument"'
        version false
        id column:'"StoreDocumentID"', generator:'sequence', params:[sequence:'STORE_DOCUMENT_SEQ']
        discriminator column:[name:'"Type"',length:50]
        documentDate column:'"DocumentDate"'
    }        
}

1 Ответ

2 голосов
/ 10 января 2012

В StoreDocument у вас есть String type и discriminator column: '"Type"', поэтому из ваших исключений похоже, что Grails пытается создать два столбца типа name.Попробуйте изменить имя вашего String или столбца дискриминатора и посмотрите, исправляет ли это проблему.

Чтобы обойти проблему с созданием поля varchar (-1), попробуйте следующее: discriminator column:[name:'Type',length:10] из этого JIRA Grails-5168 .Конечно, измените длину на то, что вам нужно.

...