Grails 在数据库级别实现双向一对一关系

标签 grails grails-orm

我有两个域类,它们通过双向的一对一关系相互绑定(bind),这是使用 实现的。有一个 .

class AssessmentData {

    static hasOne = [assessmentField:AssessmentField, assessment:Assessment]

    AssessmentField field
}


class Assessment {
   AssessmentData assessmentData
}

但是我对 Grails 在数据库级别实现这种关系的方式有点困惑。如所述here ,它只是将子域类的外键设置为 AssessmentAssessmentField表。这是我的原始直觉,两个表都应该有一个相互引用的外键,以便建立一对一的双向关系。但由于情况并非如此,我想知道 Grails 是如何实现的。

最佳答案

Its my primitive instinct that both tables should have a foreign key referring to each other in order to establish a one-to-one bidirectional relationship



你的直觉让你失望了。您问题中描述的域将生成这两个数据库表:
assessment_data
----------------    
id


assessment
----------------
id
assessment_data_id

使用 SQL 我们可以得到 assessmentassessment_data 相关联id 为 4
select * from assessment where assessment_data_id = 4

我们也可以反过来得到assessment_dataassessment 相关联使用 id 5
select ad.* from assessment_data ad
inner join assessment a ON a.assessment_data_id = ad.id
where a.id = 5

因此,如果我们可以在 SQL 中“双向”,那么我们可以使用 HQL、条件查询、动态查找器等来实现,因为这些最终都会被转换为 SQL。

关于Grails 在数据库级别实现双向一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8894412/

相关文章:

hibernate - 使用 Grails 和 GORM 在 PostgreSQL 中存储日期、时间和时区

grails - Grails 中按关联计数排序

json - 无法将Grails Controller 的JSON响应发送到jQuery数据表

grails - 我如何在 Grails 中阅读电子邮件?

java - Grails 应用程序速度非常慢

java - 在 Grails 中发布嵌套资源的问题

Grails 3 hasOne 可空性问题

java - 如何在grails gform中呈现java.time.localdate

grails - 网格单元测试

grails - 多个创建条件重用代码 grails