我是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
}
}
User.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中删除“user”字段,它可以工作但“cd1”不属于“user”。如何将“cd1”添加到“用户”?我不能创建一个新媒体,因为它是一个抽象的电话。
谢谢
答案 0 :(得分:0)
属于添加后退参考。你试过http://grails.org/doc/latest/ref/Domain%20Classes/addTo.html
吗?所以user.addToMedias(cd1);