gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:41:37 26 4
gpt4 key购买 nike

很难在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com