作为变更请求的结果,我需要为Grails应用程序实现正确的ORM。
我目前有以下简单的模型和关联:
然而,现在我需要实现的能力,单一的费用是分配给代理商。最后,我得到了以下结果:
潜在的新模式协会
在我看来,AgentFee应该包含:
所以我的问题是。我是否也应该在代理和AgentFees之间建立联系,比如:
但是,这只是觉得在AgentFee中的多重AgentFee是错误的。使用GORM实现“费用分割”概念的最佳方法是什么?
提前谢谢你,
约翰
发布于 2015-03-03 17:30:23
听起来你要把关系转变成多对多。以下是这方面的文档:http://grails.github.io/grails-doc/latest/guide/GORM.html#manyToMany
一个多到多的关系需要一个DB级别的连接表。但是,您很可能不需要一个域作为您的连接表,也就是说,您不需要AgentFee。GORM将知道如何使用连接表。
唯一需要连接表的域对象的情况是,连接表中是否有额外的列,而不是为促进多到多的关系所需的列。在这种情况下,您将为连接表创建一个域,然后创建两个一对多的关系,每个方向一个。
发布于 2015-03-03 18:19:00
回答评论中的问题:
@Michael @John如果您查看底层数据库表,那么您将只看到一个外键从一个表到另一个表,表不交叉引用,除非它是一对一的,所以像我前面描述的那样简化域类不会改变物理数据中的任何变化,而且在代码中更容易维护(您不必使用addTo()和removeFrom方法),只需创建一个依赖对象并设置它对当前的引用(您总是只更改一件事情)。
Agent a = new Agent()
Fee fee = new Fee(此外,如果要检索所有相关对象,可以创建一个属性返回列表,如下
class Fee {
Agent agent
}
class Agent {
List<Fee> getFees() {
Fee.findAllByAgent(this)
}
}然后把它当作
Agent a = new Agent()
List<Fee> aAgentsFees = a.fees当然,它是只读的,如果您想创建它们:
Agent agent1 = new Agent()
Fee feeA = new Fee(agent: agent1)
Fee feeB = new Fee()
feeB.agent = agent1https://stackoverflow.com/questions/28830706
复制相似问题