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 更多 2009-11-11 23:52:58,933 [main] 错误 mortbay.log - 嵌套在 org.springframework .beans.factory.BeanCreationException:创建名为“messageSource”的bean时出错:bean初始化失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“transactionManager”的 bean 时出错:设置 bean 属性“sessionFactory”时无法解析对 bean“sessionFactory”的引用;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“sessionFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是 org.hibernate.MappingException:
但是在这种情况下,我想要允许任何用户拥有文档的多态效果,同时强制系统的每个用户都适合定义的角色之一。因此,不应直接实例化 User 并使其抽象化。
我不想为非抽象用户类中的角色使用枚举,因为我希望能够为不同的角色添加额外的属性,这在某些情况下可能没有意义(我不想有角色设置为 RegularEmployee 的单个用户,以某种方式获得非空 managedGroup)。
这是Grails中的错误吗?我错过了什么吗?