ORA-00972: identificador é muito longo - Melhor estratégia para evitá-lo em Grails

9

Estou recebendo o erro "ORA-00972: identifier is too long" ao salvar um objeto de classe de domínio.

Caused by: org.hibernate.exception.SQLGrammarException: could not initialize a collection: [com.intelligrape.model.Address.studentsForPermanentAddressId#79366215]

Quais poderiam ser as soluções possíveis para resolver esse problema, exceto a redução do comprimento do campo studentsForPermanentAddressId. A razão é que esta é uma tabela de banco de dados legado que eu não posso alterar.

EDIT: Adicionado a descrição da classe de domínio, como solicitado por Rob Hruska

package com.intelligrape.model

class Address {

    String address1
    String address2
    String boxNumber
    String city
    Long stateLid
    String province
    String zipCode
    Long countryLid
    Double latitude
    Double longitude
    Long radius

    static hasMany = [studentsForPermanentAddressId: Student, studentsForLocalAddressId: Student]

static constraints = {
        address1 nullable: true
        address2 nullable: true
        boxNumber nullable: true, size: 1..25
        city nullable: true, size: 1..30
        stateLid nullable: true
        province nullable: true, size: 1..64
        zipCode nullable: true, size: 1..15
        countryLid nullable: true
        latitude nullable: true
        longitude nullable: true
        radius nullable: true
            studentsForPermanentAddressId nullable: true
            studentsForLocalAddressId nullable: true
    }
}
    
por Mohd Farid 15.09.2011 в 16:27
fonte

1 resposta

5

Adicione um bloco de mapeamento e os mapeamentos de colunas existentes:

    package com.intelligrape.model

class Address {

    String address1
    String address2
    String boxNumber
    String city
    Long stateLid
    String province
    String zipCode
    Long countryLid
    Double latitude
    Double longitude
    Long radius

    static hasMany = [studentsForPermanentAddressId: Student, studentsForLocalAddressId: Student]
    static mappings = {
         studentsForPermanentAddressId(column: 'stud_perm_addr_id')
    }
    static constraints = {
        address1 nullable: true
        address2 nullable: true
        boxNumber nullable: true, size: 1..25
        city nullable: true, size: 1..30
        stateLid nullable: true
        province nullable: true, size: 1..64
        zipCode nullable: true, size: 1..15
        countryLid nullable: true
        latitude nullable: true
        longitude nullable: true
        radius nullable: true
            studentsForPermanentAddressId nullable: true
            studentsForLocalAddressId nullable: true
    }
}

Como um aparte, se este não fosse um banco de dados legado, você poderia usar este projeto: link

Para gerar mapeamentos corretos desde o início.

    
por Rob Elsner 16.09.2011 / 15:24
fonte