HibernateException: пропущена ошибка таблицы для таблицы соединений с использованием Grails 2.0.2 в устаревшей базе данных MS SQL - PullRequest
0 голосов
/ 19 марта 2012

Я пытаюсь установить отношения «многие ко многим», используя Grails 2.0.1 в Windows 7. Я исчерпал и Google, и этот сайт, и мои книги Grails.Ничего не получалось.Я подключаюсь к базе данных MS SQL Server 2005, для которой у меня есть права только для чтения, и да - это устаревшая база данных.Все в двух отдельных таблицах работает нормально (все в порядке и все), но когда я пытаюсь добавить код объединяемой таблицы, я получаю сообщение об ошибке:

org.hibernate.HibernateException: отсутствует таблица: dbo.IN_USR_DRAWING_PRIV

Таблица действительно существует, и я прекрасно ее вижу, используя представление источников данных IntelliJ IDEA 10.5 и MS SQL Server Management Studio.Соответствующая часть ошибки заключается в следующем (я могу прислать больше ... гораздо больше, если необходимо):

org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем'actionManagerPostProcessor ':Не удалось инициализировать бин;вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем'actionManager ': невозможно разрешить ссылку на компонент' sessionFactory 'при установке свойства компонента' sessionFactory ';вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем 'sessionFactory': сбой вызова метода init;вложенное исключение: org.hibernate.HibernateException: отсутствует таблица: dbo. IN_USR_DRAWING_PRIV

Вот 2 класса домена:

class Drawing {
static hasMany = [appusers:Appuser]
String id
String drawingId  //this is in the join table
String drawingName

static transients = ['name']

void setName(String name) {
    id = name
}

String getName() {
    return id
}

static mapping = {
    table name: "IN_DRAWING", schema: "dbo"
    version false
    id column: 'DRAWING_ID', generator:'identity', insertable:false, updateable:false
    drawingId column: "`DRAWING_ID`",insertable:false, updateable:false  //this is in the join table
    drawingName column: "`DRAWING_NAME`"
    appusers column: '`USR_ID`',
            joinTable: 'IN_USR_DRAWING_PRIV'
}

}

class Appuser {
static belongsTo = Drawing
static hasMany = [drawings:Drawing]

String id
String usrId  //this is in the join table
String usrName

static transients = ['name']

void setName(String name) {
    id = name
}

String getName() {
    return id
}

static mapping = {
    table name: 'IN_USR', schema: "dbo"
    version false
    id column:'USR_ID', generator:'identity', insertable:false, updateable:false  //this is in the join table
    drawings column: 'DRAWING_ID',
            joinTable: 'IN_USR_DRAWING_PRIV'
    usrName column: "`USR_NAME`"
    }

}

А вот схема для таблицы соединения:

dbo.IN_USR_DRAWER_PRIV
    USR_ID        (PK, varchar(23), not null)
    DRAWING_ID    (PK, FK, varchar(23), not null)
    PRIV_ID       (PK, int, not null)

GRAG сообщает, что имеет составной ключ из всех 3 столбцов, что он делает вместе с FK для DRAWING_ID.

Решения, которые я попробовал:

  1. Этот код (который завершается с ошибкой «Missing Table».
  2. Добавление контроллера домена для таблицы соединения - тоже самоерезультат.

Любые советы / подсказки / решения приветствуются.

1 Ответ

1 голос
/ 30 марта 2012

Я исправил это, используя Groovy SQL напрямую и передав T-SQL.

...