我有两个域类,它们通过双向的一对一关系相互绑定(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 为 4
select * from assessment where assessment_data_id = 4
我们也可以反过来得到
assessment_data与
assessment 相关联使用 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。




