Grails在多对多关系的联接表中持久化数据时遇到问题

Grails在多对多关系的联接表中持久化数据时遇到问题,grails,groovy,persistence,Grails,Groovy,Persistence,我在持久化与联接表有多对多关系的域对象时遇到问题 class A{ String name static hasMany = [bs:B] } class B{ String surname static belongsTo=A static hasMany=[as:A] } A a = new A(name:'Test') B b = new B(surname:'user') a.addToBs(b) a.save(flush:true) 那么我希望看到的是 Table A

我在持久化与联接表有多对多关系的域对象时遇到问题

class A{

String name
static hasMany = [bs:B]

}


class B{

String surname
static belongsTo=A
static hasMany=[as:A]

}

A a = new A(name:'Test')
B b = new B(surname:'user')

a.addToBs(b)
a.save(flush:true)
那么我希望看到的是

Table A                      Table AB                  Table B
id    name                 a_id     b_id               id   surname
1      Test                 1         1                 1    User
但是,数据仅保留在表A中

有人知道我做错了什么吗


谢谢

我找到了这个链接,它显示了映射多对多关系的清晰方式


我仍然无法让它以我目前想要的方式工作

我找到了这个链接,它显示了映射多对多关系的清晰方式


我还没能让它按我目前想要的方式工作

我试着模仿你的代码,并为我进行级联

A类:

package searcher

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

    static constraints = {
    }

    public String toString() {
        def s = "Name: $name\n Bs: "
        bs.each {
            s = "$s $it "
        }
        return s
    }
}
B类:

package searcher

class B {

    String surname
    static belongsTo = A
    static hasMany = [as:A]

    static constraints = {
    }
}
控制器源:

package searcher

class ManyController {

    def ab = {

        A a = new A(name:'Test')
        B b = new B(surname:'user')
        a.addToBs(b)
        a.save(flush:true)

        render A.list()
    }
}
产生输出:

[名称:测试Bs:searcher.B:1]


我没有遇到您遇到的问题,但我确实遇到了一些最初的问题,通过执行
grails clean
修复了这些问题。您是否尝试过各种数据库配置?我只是使用内存中的hsqldb集来创建drop。如果您使用的是我碰巧安装的DBMS,我会尝试将其指向另一个数据库,并对其进行一次尝试。

我尝试模仿您的代码,并对其进行级联

A类:

package searcher

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

    static constraints = {
    }

    public String toString() {
        def s = "Name: $name\n Bs: "
        bs.each {
            s = "$s $it "
        }
        return s
    }
}
B类:

package searcher

class B {

    String surname
    static belongsTo = A
    static hasMany = [as:A]

    static constraints = {
    }
}
控制器源:

package searcher

class ManyController {

    def ab = {

        A a = new A(name:'Test')
        B b = new B(surname:'user')
        a.addToBs(b)
        a.save(flush:true)

        render A.list()
    }
}
产生输出:

[名称:测试Bs:searcher.B:1]


我没有遇到您遇到的问题,但我确实遇到了一些最初的问题,通过执行
grails clean
修复了这些问题。您是否尝试过各种数据库配置?我只是使用内存中的hsqldb集来创建drop。如果您使用的是我碰巧安装的DBMS,我会尝试将其指向另一个数据库并对其进行旋转。

谢谢您的帮助,您的示例很有效。我发现我的问题是,我的“a”类中有一个与关系名“bs”同名的列表,grails似乎不喜欢它。一旦我更改了列表的名称,级联保存就很好了。谢谢你的帮助,你的示例很好用。我发现我的问题是,我的“a”类中有一个与关系名“bs”同名的列表,grails似乎不喜欢它。一旦我更改了列表的名称,级联保存工作正常