ORA-00972: идентификатор слишком длинный - лучшая стратегия, чтобы избежать его в Grails - PullRequest
9 голосов
/ 15 сентября 2011

Я получаю сообщение об ошибке «ORA-00972: идентификатор слишком длинный» при сохранении объекта класса домена.

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

Какие могут быть возможные решения для решения этой проблемы, кроме уменьшения длины поля studentForPermanentAddressId,Причина в том, что это устаревшая таблица базы данных, которую я не могу изменить.

РЕДАКТИРОВАТЬ: Добавлено описание класса домена, как его попросил Роб Хруска

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

1 Ответ

5 голосов
/ 16 сентября 2011

Добавить блок сопоставления и существующие сопоставления столбцов:

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

Кроме того, если бы это не была устаревшая база данных, вы можете использовать этот проект: http://code.google.com/p/hibernate-naming-strategy-for-oracle/

Для создания правильных отображений с самого начала.

...