ORA-00972: l'identificateur est trop long - meilleure stratégie pour l'éviter à Grails

je reçois une erreur "ORA-00972: identifier est trop long" lors de l'enregistrement d'un objet de classe de domaine.

Caused by: org.hibernate.exception.SQLGrammarException: could not initialize a collection: [com.intelligrape.model.Address.studentsForPermanentAddressId#79366215]
<!-Quelles sont les solutions possibles pour résoudre ce problème, à l'exception de la réduction de la longueur des étudiants pour les étudiants permanents? La raison étant, c'est une table de base de données legacy que je ne peux pas modifier.

EDIT: ajout de la description de la classe de domaine comme demandé par 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
    }
}
9
demandé sur Mohd Farid 2011-09-15 18:27:46

1 réponses

Ajouter un bloc de mappage et les mappages de colonnes existants:

    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
    }
}

en passant, si ce n'était pas une base de données ancienne, vous pourriez utiliser ce projet: http://code.google.com/p/hibernate-naming-strategy-for-oracle/

Pour générer des mappages corrects dès le début.

5
répondu Rob Elsner 2011-09-16 13:24:12