grails - 使用正确的Grails ORM(GORM)实现是什么?

标签 grails orm model associations gorm

作为更改请求的结果,我需要为我的Grails应用程序实现正确的ORM。

我目前有以下简单的模型和关联:

  • 代理
    static hasMany = [fees:Fee]
    
  • 费用
    static belongsTo = [agent:Agent]
    

  • 但是,现在我需要实现在代理之间分配单个费用的功能。我得出以下结论:

    潜在的新模型协会
  • 费用
    static hasMany = [agentfees:AgentFee]
    
  • 代理
    no associations ??
    
  • AgentFee
    static belongsTo = [fee:Fee]
    

  • 在我看来,AgentFee将包含:
  • 对费用的引用
  • 对代理
  • 的引用
  • 代理商对费用的百分比分配(例如80%)

  • 所以我的问题是。我是否应该在Agents和AgentFees之间建立关联,例如:
  • 费用
    static hasMany = [agentfees:AgentFee]
    
  • 代理
    static hasMany = [agentfees:AgentFee]
    
  • AgentFee
    static belongsTo = [fee:Fee]
    static belongsTo = [agent:Agent]
    

  • 但这对于AgentFee中的多个belongsTo感觉很不对。使用GORM实施“费用拆分”概念的最佳方法是什么?

    提前致谢,

    约翰

    最佳答案

    听起来您正在将关系更改为多对多。这是该文档:http://grails.github.io/grails-doc/latest/guide/GORM.html#manyToMany

    多对多关系需要数据库级别的联接表。但是,您很可能不需要加入表的域,即不需要AgentFee。 GORM将知道使用联接表。

    唯一需要联接表的域对象的地方是联接表是否包含除促进多对多关系所需的列之外的其他列。在这种情况下,您将为联接表创建一个域,然后创建两个一对多关系,每个方向一个。

    关于grails - 使用正确的Grails ORM(GORM)实现是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28830706/

    相关文章:

    PHP Doctrine 2 ORM : Non-Entity object as attribute in entity

    asp.net-mvc-3 - 如何在 MVC 中使用存储库模式创建动态的多个局部 View

    string - 在Groovy/Grails中使模型名称易于阅读

    python - Django 验证列组合是否存在( bool 字段唯一)

    chalice 未能建立 war

    oracle - Grails 与 Oracle-DB : seems to have only one global counter for IDs

    Grails + Tomcat6 + 多个实例 + 共享库文件夹

    java - 如何将类 'parseDate' 的对象 'java.lang.String' 转换为 grails 中的类 'java.util.Date'?

    hibernate - 将 JPA 实体命名为 "Group"是否非法?

    c# - NHibernate-无法执行查询-输入字符串的格式不正确