将 Grails 域 类 映射到 joinTable 时出现问题

Problems mapping Grails domain classes to joinTable

很难在 Grails 文档、GIA 书籍或 SO 中找到答案。

我正在将 Grails 移植到遗留数据库中。我有两个 table,它们之间的关系存在于外键的现有连接 table 中。

根据我的阅读,您似乎可以使用 joinTable 参数指定 在连接 table 中使用来源 table 中的哪个字段 =],但不是连接 table 中外键列 的 名称。此数据库中的一个 table 遵循约定(视频 table 有一个 id 列,在连接 table 中称为 "video_id";另一个 table 没有( PublisherCategory table 有一个 id 列,但在连接 table 中表示为 "category_id."

当 Grails 启动时,它抱怨重复的 "id" 字段,或者连接 table 中不存在的字段。 (从文档中我不清楚 joinTable 中的列参数是否是 class 中用作外键的列的名称,或者它是否意味着外键的名称它出现在 joinTable 中。我一直认为它是前者。)

我还尝试创建一个域 class 来表示连接 table 本身,对两个源 table 都有 hasMany 关系,但 Grails 也不喜欢那样。 (它要求一个实体是 "owner",但将任一域设置为所有者都不起作用。)

有什么建议吗?

joinTable is not a foreign key, it's a value. For a many-to-many中的参数需要设置双向映射。所以使用这样的架构:

视频-|--------|< (video_id) THE_JOIN_TABLE (category_id) >|--------|- PUBLISHER_CATEGORY

可以像这样建模为域 类:

class PublisherCategory {
    hasMany = [videos: Video]
    static belongsTo = Video

    static mapping = {
        videos joinTable: [
            name: 'the_join_table',
            key: 'category_id'
        ]
    }
}

class Video {
    static hasMany = [categories: PublisherCategory]

    static mapping = {
        categories joinTable: [
            name: 'the_join_table',
            key: 'video_id'
        ]
    }
}