0

我想将一个孩子添加到两个不同的父类中,如下所示:

第一的:

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'
    }
}

Thw child 就是这样定义的

  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

我做错了什么?有更好的方法吗?

更新:

我找到了这个

在 Grails 中保存关联的域类

这种行为似乎需要“属于”。但是为什么'级联:'all-delete-orphan'不强制这样做?因为在那种特定情况下我不能使用“属于”

4

2 回答 2

0

我复制了您的示例(稍作修改以将组表名称更改为非保留字)并且级联使用 grails 2.2.1 正常工作。两者都MemberGroup他们的保存级联到新创建的Profiles.

假设您的类比这更复杂,您的类中的其他地方可能会出现错误(例如,在constraints代替 中描述的级联行为mapping等)。

于 2013-05-09T14:21:54.897 回答
0

我找到了一个不错的解决方案。最好的方法是在孩子中定义两个父母,但可以为空。像那样:

class Profile() {
    static belongsTo = [member: Member, team: Team]

    static constraints = {
        member nullable: true
        team nullable: true
    }
}

这样,级联行为就可以正常工作!

于 2013-05-10T17:10:03.603 回答