Grails 不为一对多关系填写外键字段
Grails does not fill in foreign-key field for one-to-many relation
我是 grails 的新手,在尝试不使用 join-table.
的情况下尝试定义一对多映射时一定遗漏了一些重要的东西
我有一个域对象 Foo
class Foo {
static hasMany = [remarks: ChangeRemark]
static mapping = {
remarks column:'PART_REMARKS_ID', joinTable:false
}
}
和另一个域对象 ChangeRemark
class ChangeRemark {
String remark
String name
}
我初始化了一个 Foo 对象,并向其添加了两个 ChangeRemark 对象
ChangeRemark remark = new ChangeRemark(remark:"test", name:"t").save(flush:true)
ChangeRemark remark2 = new ChangeRemark(remark:"test2", name:"y").save(flush:true)
Foo foo = new Foo().save(flush:true)
foo.addToRemarks(remark).save(flush:true)
foo.addToRemarks(remark2).save(flush:true)
当我在 foo 上打印出备注的大小时,它确实是 2,但是外键的数据库列 PART_REMARKS_ID 在 ChangeRemarks table 为空。这意味着在我重新启动我的应用程序后,无法建立对象和备注之间的连接
让 grails 在 table 中插入 Foo id 我错过了什么?
为了避免连接 table 使用 belongsTo
创建从 ChangeRemark
到 Foo
的引用。
class Foo {
static hasMany = [remarks: ChangeRemark]
}
class ChangeRemark {
String remark
String name
static belongsTo = [foo: Foo]
}
执行此操作时,change_remark
table 会获得一个 foo_id
外键。这意味着一个 ChangeRemark
实例只能引用一个 单个 Foo
实例;我假设这是你的意图。
这会改变您添加 ChangeRemark
的方式:
ChangeRemark remark = new ChangeRemark(remark:"test", name:"t")
ChangeRemark remark2 = new ChangeRemark(remark:"test2", name:"y")
Foo foo = new Foo()
foo.addToRemarks(remark)
foo.addToRemarks(remark2)
foo.save(flush: true)
基本上,Foo
负责持久化自身和 ChangeRemark
s。
我是 grails 的新手,在尝试不使用 join-table.
的情况下尝试定义一对多映射时一定遗漏了一些重要的东西我有一个域对象 Foo
class Foo {
static hasMany = [remarks: ChangeRemark]
static mapping = {
remarks column:'PART_REMARKS_ID', joinTable:false
}
}
和另一个域对象 ChangeRemark
class ChangeRemark {
String remark
String name
}
我初始化了一个 Foo 对象,并向其添加了两个 ChangeRemark 对象
ChangeRemark remark = new ChangeRemark(remark:"test", name:"t").save(flush:true)
ChangeRemark remark2 = new ChangeRemark(remark:"test2", name:"y").save(flush:true)
Foo foo = new Foo().save(flush:true)
foo.addToRemarks(remark).save(flush:true)
foo.addToRemarks(remark2).save(flush:true)
当我在 foo 上打印出备注的大小时,它确实是 2,但是外键的数据库列 PART_REMARKS_ID 在 ChangeRemarks table 为空。这意味着在我重新启动我的应用程序后,无法建立对象和备注之间的连接
让 grails 在 table 中插入 Foo id 我错过了什么?
为了避免连接 table 使用 belongsTo
创建从 ChangeRemark
到 Foo
的引用。
class Foo {
static hasMany = [remarks: ChangeRemark]
}
class ChangeRemark {
String remark
String name
static belongsTo = [foo: Foo]
}
执行此操作时,change_remark
table 会获得一个 foo_id
外键。这意味着一个 ChangeRemark
实例只能引用一个 单个 Foo
实例;我假设这是你的意图。
这会改变您添加 ChangeRemark
的方式:
ChangeRemark remark = new ChangeRemark(remark:"test", name:"t")
ChangeRemark remark2 = new ChangeRemark(remark:"test2", name:"y")
Foo foo = new Foo()
foo.addToRemarks(remark)
foo.addToRemarks(remark2)
foo.save(flush: true)
基本上,Foo
负责持久化自身和 ChangeRemark
s。