hibernate - 将 Grails 域类映射到 joinTable 的问题

标签 hibernate grails grails-orm jointable

很难在 Grails 文档、GIA 书籍或 SO 中找到这个问题的答案。

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

根据我的阅读,似乎可以使用 joinTable 参数指定 哪个字段来自源表的用于连接表,而不是 外键列名在连接表中。此数据库中的一个表遵循约定(Video 表有一个 id 列,在连接表中称为“video_id”;另一个表没有(PublisherCategory 表有一个 id 列,但在连接表中表示为“category_id”) 。”

当 Grails 启动时,它要么提示重复的“id”字段,要么提示连接表中不存在的字段。 (从文档中我不清楚 joinTable 中的列参数是否是该类中用作外键的列的名称,或者,如果它是外键的名称,因为它出现在joinTable。我一直在努力相信它是前者。)

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

有什么建议么?

最佳答案

joinTable 中的列参数不是外键,它是一个值。对于 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'
        ]
    }
}

关于hibernate - 将 Grails 域类映射到 joinTable 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32077395/

相关文章:

java - 使用 JPA 存储库的 Hibernate 获取配置文件

json - Spring MVC 测试框架 - JSON 端点仅在测试中返回 406

java - Grails - 通过从基类中选择来使用父类(super class)

java - Hibernate 全文搜索分页

java - 枚举字段上的 Hibernate Like 标准

grails - Swaggydoc插件grails 3.2.1

apache-flex - Dojo或与Grails一起弯曲?

grails - 如何为每个 Action 设置模型属性

Grails 应用程序中的 Hibernate 二级缓存

Grails 3.2 - 列出域类中不可为空的字段名称