Grails GORM не сохраняет абстрактные доменные классы в базе данных, что приводит к разрыву в полиморфных отношениях. Например:
abstract class User {
String email
String password
static constraints = {
email(blank:false, nullable:false,email:true)
password(blank:false, password:true)
}
static hasMany = [membership:GroupMembership]
}
class RegularEmployee extends User {}
class Manager extends User {
Workgroup managedGroup
}
class Document {
String name
String description
int fileSize
String fileExtension
User owner
Date creationTime
Date lastModifiedTime
DocumentData myData
boolean isCheckedOut
enum Sensitivity {LOW,MEDIUM,HIGH}
def documentImportance = Sensitivity.LOW
static constraints = {
name(nullable:false, blank:false)
description(nullable:false, blank:false)
fileSize(nullable:false)
fileExtension(nullable:false)
owner(nullable:false)
myData(nullable:false)
}
}
вызывает
Вызывается: org.hibernate.MappingException: ассоциация из
Табличный документ ссылается на несопоставленный класс: пользователь
... еще 25-11-11 23: 52: 58,933 [main] ОШИБКА mortbay.log - Вложена в org.springframework.beans.factory.BeanCreationException: Ошибка при создании компонента с именем 'messageSource': инициализация компонента
не удалось; вложенное исключение
org.springframework.beans.factory.BeanCreationException: ошибка
создание компонента с именемactionManager: не удается разрешить ссылку
для bean-компонента sessionFactory при установке свойства bean-компонента sessionFactory;
вложенное исключение
org.springframework.beans.factory.BeanCreationException: ошибка
создание компонента с именем sessionFactory: вызов метода init
не удалось; Вложенное исключение - org.hibernate.MappingException: An
ассоциация из таблицы документа относится к несопоставленному классу: пользователь:
org.hibernate.MappingException: ассоциация из документа таблицы
ссылается на несопоставленный класс: пользователь
Но в этом сценарии я хочу, чтобы полиморфный эффект позволял любому пользователю владеть документом, заставляя каждого пользователя системы вписываться в одну из определенных ролей. Следовательно, Пользователь не должен быть непосредственно создан и сделан абстрактным.
Я не хочу использовать перечисление для ролей в неабстрактном классе User, потому что я хочу иметь возможность добавлять дополнительные свойства к различным ролям, что может не иметь смысла в определенных контекстах (я не хочу иметь одного пользователя с ролью RegularEmployee, которая каким-то образом получает ненулевую управляемую группу).
Это ошибка в Grails? Я что-то пропустил?