我正在尝试将域驱动设计应用到我的应用程序中,并且为了限制聚合根之间的深度遍历,建议是仅使用他们的身份来关联它们。假设我有以下域类,
人
class Person {
Integer age
String name
}
和PhoneBill
class PhoneBill {
// reference to Person
Long accountHolderId
BigDecimal amount
}
实际上,此设置已经可以正常工作。但是,我想将外键约束添加到accountHolderId
只是为了确保设置的任何值已经存在于数据存储中。官方的Grails文档似乎并没有涵盖这一点。
答案 0 :(得分:0)
假设您的Person
对象仍有ID,则可以添加custom validator,如果id
无效,则会返回错误。
class PhoneBill {
// reference to Person
Long accountHolderId
BigDecimal amount
static constraints = {
accountHolderId validator: {
!Person.exists(it) ?: 'your.custom.error.message.key'
}
}
}
请注意,.exists()
仅适用于Grails 2.3.x.我相信。如果您使用的是旧版本,也可以同时拨打.get()
。