Я пытаюсь установить отношения «многие ко многим», используя 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.
Решения, которые я попробовал:
- Этот код (который завершается с ошибкой «Missing Table».
- Добавление контроллера домена для таблицы соединения - тоже самоерезультат.
Любые советы / подсказки / решения приветствуются.