gpt4 book ai didi

grails - Hibernate的hasMany/belongsTo结构

转载 作者:行者123 更新时间:2023-12-02 15:05:33 26 4
gpt4 key购买 nike

我目前正在使用“内存中” H2数据库运行Grails 2.3.3。

H2将“hasMany” /“belongTo”条件的所有子代实例的ID保留在哪里。

我认为在子域模型中存储父ID的列上方必须有一个额外的存储位置。

我以为是因为我需要先从其域模型直接删除子级之前运行removeFrom命令。

例如:

父域模型具有hasMany构造:

static hasMany = [ videoCatDataHM: VideoCatDataShr]

子域具有免费的“belongsTo”构造:
static belongsTo = [ vidCatAdminBT: VideoCatAdminShr]

子域模型中有一列名为VID_CAT_ADMIN_BT_ID的列,该列正确存储了父域的ID。

在子实例上运行删除之前,我必须运行以下removeFrom命令:
vidCatAdminId.removeFromVideoCatDataHM(videoCatDataShrInstance)

这表明,父级与子DM中保存的ID分开保存与它关联的所有hasMany子级的其他记录。

如建议的那样,我已经向该应用程序添加了Hibernate日志记录-这是非选择(即DM更改)日志:

Hibernate: update video_cat_admin_shr set version=?, description=?, name=?, organbt_id=? where id=? and version=?

Hibernate: delete from video_cat_data_shr where id=? and version=?



更新正在更新父实例(大概是通过removeFrom调用),而删除操作正在删除子实例。在删除之前和之后通过dbconsole查看父实例表明,对父实例的唯一更改是实例的版本号增加了一个。

最佳答案

注意,这与H2无关,在Hibernate GORM实现管理的任何关系数据库中都是一样的。

在这种情况下,您已经定义了双向一对多,因此您已经回答了问题-它是子表中与“owner”属性相对应的列,在本例中是VID_CAT_ADMIN_BT_ID中的VideoCatDataShr.vidCatAdminBT

但是数据库中没有存储任何子ID的集合,而是根据需要查询这些ID,本质上是

select VID_CAT_ADMIN_BT_ID from video_cat_data_shr where id=?

在哪里?是拥有的 VideoCatAdminShr实例的ID。该查询将找到使用此外键链接回父级的所有子级记录。打开SQL日志记录以查看所使用的实际查询。

关于grails - Hibernate的hasMany/belongsTo结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33637762/

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