我想将一个孩子添加到两个不同的父类中,如:
首先:
class Member {
Profile profile
Member() {
this.profile = new Profile()
}
static mapping = {
profile cascade: 'all-delete-orphan'
}
}
第二
class Team {
Profile profile
Team() {
this.profile = new Profile()
}
static mapping = {
profile cascade: 'all-delete-orphan'
}
}
孩子就像那样定义
class Profile() {
}
问题是当我保存父母时,它会保存孩子:
Member member = new Member().save(flush: true, failOnError: true)
assert !member.hasErrors()
assert member.profile
assert !member.profile.hasErrors()
assert member.profile.id //FAIL
我做错了什么?有没有更好的方法呢?
更新
我发现了这个
Saving associated domain classes in Grails
这种行为似乎需要“属于”。但是为什么'cascade:'all-delete-orphan'不强迫这个?因为在特定情况下我不能使用'属于'
答案 0 :(得分:0)
我复制了你的例子(略微修改了将组表名改为非保留字),并且级联使用grails 2.2.1正常工作。 Member
和Group
都将其保存级联到新创建的Profiles
。
假设您的课程比这更复杂,您的课程中可能会有其他错误(例如constraints
中描述的级联行为,而不是mapping
等)。
答案 1 :(得分:0)
我找到了一个很好的解决方案。最好的方法是在子节点中定义父节点但可以为空。像那样:
class Profile() {
static belongsTo = [member: Member, team: Team]
static constraints = {
member nullable: true
team nullable: true
}
}
这样,级联行为就可以正常工作了!