为了在映射单向OneToMany关系时获得外键列(无joinTable),我按照Grails(版本2.2.3)参考文档第6.5.2.1节“ OneToMany映射”中的步骤进行操作。
对于单向关联,需要在关联本身上指定外键。例如,给定“人”(由“ 1”代替)和“地址”(由“ Many”代替)之间的单向OneToMany关系,以下代码将更改“多”表中的外键
class One {
static hasMany = [manyCollection:Many]
static mapping = {
manyCollection(column:"ONE_ID")
}
}
但是,当我跑步时
One one = new One()
one.addToManyCollection(new Many())
one.save()
我进入控制台
insert
into
one
(id, version)
values
(null, ?)
insert
into
many
(id, version)
values
(null, ?)
insert
into
one_many
(one_many_collection_id, many_id)
values
(?, ?)
注意Grails创建了一个称为one_many的joinTable。所以,我的问题是:是bug还是其他?我应该怎么做才能摆脱joinTable?
即使我使用类似的东西
class One {
static hasMany = [manyCollection:Many]
static mapping = {
manyCollection(joinTable:false)
}
}
为凸显在这里,我得到的结果相同
您快要准备好了,您需要进行两半的映射,但是您需要两者都可以使其正常工作。它不是一个文档完善的功能,但是我以前使用过它,并且确实可以使用(例如,没有连接表)。所以在你的一堂课上
class One {
..
static mapping = {
manyCollection column: "ONE_ID", joinTable: false
}
}
注意:进行映射更改时,退出,清理并重新启动grails可能是一个好主意。解决方案是,简单的擦洗干净后,我就失去了很多时间来敲打我的头。
同样,从技术上讲,您可以在Many类中添加belongsTo
后向引用,而仍然需要真正的单向功能,但是如果需要的话,还可以通过级联操作(映射到One类中)获得额外的好处。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句