【发布时间】:2014-08-14 15:00:42
【问题描述】:
我是 Grails 的新手,我正在尝试创建这样的东西:
我有一个名为 Media 的抽象类,以及从 Media 扩展的两个类:CD 和 DVD。我有一个可以拥有 0 个或多个媒体(Cds 或 Dvds)的类用户:
Media.groovy
abstract class Media {
String title
String year
static belongsTo = [user: User]
static constraints = {
title blank: false
year nullable: true
}
static mapping = {
tablePerHierarchy false
}
}
用户.groovy
class User{
transient springSecurityService
String username
String password
boolean enabled = true
boolean accountExpired
boolean accountLocked
boolean passwordExpired
static hasMany = [medias: Media]
...
Cd.groovy
class Cd extends Media {
String artist
static constraints = {
artist blank: false
}
String toString() { return title}
}
在 Bootstrap 中我这样做:
Bootstrap.groovy
def userRole = Role.findOrSaveWhere(authority: 'ROLE_USER')
def user= User.findOrSaveWhere(username: 'user', password: '1234')
if(!user.authorities.contains(userRole)) {
UserRole.create(user, userRole, true)
}
def cd1 = new Cd(title: "Universal", year: "2010", artist: "Borknagar", user: user).save(failOnError: true)
但我收到一个错误:
消息:save() 期间发生验证错误: - 字段 'user' 上的对象 'org.grails.Cd' 中的字段错误:拒绝值 [null];
如果我从 cd1 中删除“用户”字段,它可以工作,但“cd1”将不属于“用户”。如何将“cd1”添加到“用户”?我无法创建新媒体,因为它是一个抽象调用。
谢谢
【问题讨论】:
标签: twitter-bootstrap grails grails-orm