【问题标题】:Unable to use addTo with hasmany grails domain无法将 addTo 与 hasmany grails 域一起使用
【发布时间】:2014-05-08 08:27:16
【问题描述】:

我在 grails 中有 2 个带有 mysql 的表

说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() 的签名

如果我在某处错了,请帮助我并纠正我。

【问题讨论】:

    标签: grails grails-orm grails-domain-class


    【解决方案1】:
    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 的实例。当我们在a上将b实例添加到b's的集合中时,当我们保存a的实例时,它会自动保存b的实例。

    【讨论】:

    • 没有belongsto关系怎么办?我遇到了类似的问题,如果我在将 A 添加到 hasmany 列表后保存它,则列表不会更新。我不能拥有属于,因为我的 B 类可能属于 2 个不同的类,我不希望这 2 个类以任何方式链接(即:继承)
    • @Randyaa 您始终可以使用接口,这两个类都实现了,并且将成为这些类的所有者(它们属于该接口的实现)。
    • 是否绝对有必要执行刷新以将 b 添加到 a 中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 2010-12-04
    • 2019-08-28
    相关资源
    最近更新 更多