我有两个域类,它们通过双向的一对一关系相互绑定(bind),这是使用 实现的。有一个 .
class AssessmentData {
static hasOne = [assessmentField:AssessmentField, assessment:Assessment]
AssessmentField field
}
class Assessment {
AssessmentData assessmentData
}
但是我对 Grails 在数据库级别实现这种关系的方式有点困惑。如所述here ,它只是将子域类的外键设置为
Assessment
和 AssessmentField
表。这是我的原始直觉,两个表都应该有一个相互引用的外键,以便建立一对一的双向关系。但由于情况并非如此,我想知道 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 我们可以得到
assessment
与 assessment_data
相关联id 为 4select * from assessment where assessment_data_id = 4
我们也可以反过来得到
assessment_data
与 assessment
相关联使用 id 5select 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/