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

Hibernate 将Grails域类映射到joinTable时出现问题,hibernate,grails,gorm,jointable,Hibernate,Grails,Gorm,Jointable,很难在Grails文档、GIA书籍等中找到答案 我正在将Grails移植到遗留数据库上。我有两个表,它们之间的关系在现有的外键联接表中 从我所读到的内容来看,通过joinTable参数,您可以指定连接表中使用源表中的哪个字段,而不是连接表中外键列的名称。此数据库中的一个表遵循约定(视频表有一个id列,联接表中称为“Video_id”);另一个表没有(PublisherCategory表有一个id列,但在联接表中表示为“category_id”) 当Grails启动时,它要么抱怨重复的“id”字段

很难在Grails文档、GIA书籍等中找到答案

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

从我所读到的内容来看,通过joinTable参数,您可以指定连接表中使用源表中的哪个字段,而不是连接表中外键列的名称。此数据库中的一个表遵循约定(视频表有一个id列,联接表中称为“Video_id”);另一个表没有(PublisherCategory表有一个id列,但在联接表中表示为“category_id”)

当Grails启动时,它要么抱怨重复的“id”字段,要么抱怨联接表中不存在字段。(从文档中我不清楚joinTable中的column参数是该类中用作外键的列的名称,还是joinTable中出现的外键的名称。我一直相信它是前者。)

我还尝试创建一个域类来表示联接表本身,两个源表都有许多关系,但Grails也不喜欢这样(它要求一个实体是“所有者”,但将任一域设置为“所有者”都不起作用)

有什么建议吗?

中的列参数不是外键,而是一个值。对于a,您需要从两个方向设置映射。因此,对于这样的架构:

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'
        ]
    }
}
视频-|-----------------(视频id)加入表格(类别id)>|-----------------发布者类别

可以建模为域类,如下所示:

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'
        ]
    }
}

非常有帮助,但对于“column”(Grails文档中的“inverse”)在本文中的含义仍然感到困惑。好吧,引用您的一个选择,它是…出现在joinTable中的外键的名称。它不是类中属性的名称。