我有两个域类,它们通过双向的一对一关系相互绑定(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。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!