没有joinTable的单向OneToMany关系

Art*_*ald 8 mapping grails grails-orm

为了在映射单向OneToMany关系时实现外键列(没有joinTable),我按照Grails(版本2.2.3)参考文档,第6.5.2.1节 OneToMany映射的步骤进行操作,其中说明

使用单向关联时,需要在关联本身上指定外键.例如,给定Person(由One替换)和Address(由Many替换)之间的单向OneToMany关系,以下代码将更改Many表中的外键

class One {

    static hasMany = [manyCollection:Many]
    static mapping = {
        manyCollection(column:"ONE_ID")
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,当我跑

One one = new One()
one.addToManyCollection(new Many())

one.save()
Run Code Online (Sandbox Code Playgroud)

我进入控制台

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
    (?, ?)
Run Code Online (Sandbox Code Playgroud)

注意Grails创建一个名为one_many的joinTable.所以,我的问题:这是一个错误或其他什么?我该怎么做才能摆脱joinTable?

即使我使用类似的东西

class One {

    static hasMany = [manyCollection:Many]
    static mapping = {
        manyCollection(joinTable:false)
    }

}
Run Code Online (Sandbox Code Playgroud)

为凸显在这里,我得到的结果相同

iku*_*men 11

你几乎就在那里,你有两半的映射,但你需要它们才能正常工作.这不是一个记录良好的功能,但我之前使用过它,它肯定有效(例如没有连接表).所以在你的One课堂上,

class One {
  ..
  static mapping = {
    manyCollection column: "ONE_ID", joinTable: false
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:在进行映射更改时退出,清理和重新启动grails可能是个好主意.当一个简单的Grails clean是解决方案的时候,我已经失去了很多时间.

此外,你可以从技术上添加你的Many类中belongsTo 没有后引用,你仍然会有一个真正的单向,但如果它是你需要的东西,还有级联动作(映射在一个类)的额外好处.