微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法使用带有hasmany grails域的addTo

我有两个带有 mysql的grails表

说A和B.

我想在这里实现的场景是:

(1)A的实例可以有零个/一个/多个B实例.

(2)当删除实例A时,必须删除其所有相关的B.

(3)B的每个实例必须只与A的一个实例相关联.

(4)A知道B,但B不知道A.

条件号4不是强制性的.

从上面的信息看来:从A到B的单向一对多

目前我在做的是:(从here获取帮助)

class A
{
  String name
  Set bs=[]
  static hasMany=[bs:B]
}

Class B
{
  String name
}

B b=new B(name:'bname')
b.save()
A a=new A(name:'aname')
a.addToBs(b)
a.save()

保存两个条目时,(B正在保存,但A未保存)我使用addTo并获取错误没有方法addToBs()的签名

如果我错了,请帮助我并纠正我.

解决方法

class A
{
  String name
  static hasMany=[bs:B] //by default bs are Set. no need of explicit declaration
}

Class B
{
  String name
  static belongsTo = A //when delete a it's b also will get deleted
}

    B b1=new B(name:'bname1')
    B b2=new B(name:'bname11')
    B b3=new B(name:'bname2')
    A a=new A(name:'aname1')
    A a2=new A(name:'aname2')
    a.save(flush:true)
    a2.save(flush:true)
    a.addToBs(b1)
    a.addToBs(b2)
    a2.addToBs(b3)
    a.save(flush:true)
    a2.save(flush:true)

无需保存b的实例.当我们将b实例添加到a的b集合中时,它会在我们保存a的实例时自动保存b的实例.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐