Grails/GORM : creating one-to-one optional relationship

标签 grails grails-orm domain-model

我正在设计一个系统,其中用户之间的帖子/讨论可以升级为票证。在一个特定的地方,我试图创建一对一的可选关系,但遇到了某些问题。下面给出了聚光灯中实体的精简版本。

规则:

  • 如果需要,帖子可以成为票证。 (可选)
  • 一张票必须有一个帖子。 (必填)

  • Post.groovy
    class Post {
    
            String title
            String description
            String postedBy
    
            Ticket ticket
    
            static hasMany = [comments: Comment]
    
        static constraints = {
            title(blank:false)
            description(blank:false)
            postedBy(blank:false)
            ticket (nullable:true,unique:true)
        }
    }
    

    票务.groovy
    class Ticket {
    
            String title
            String description
            String postedBy
    
            Post post
    
            static hasMany = [responses: Response]
    
            static constraints = {
                    title(blank:false)
                    description(blank:false)
                    postedBy(blank:false)
                    post (nullable:false,unique:true)
            }
    
    }
    

    这在某种程度上有效。我可以:
  • 创建一个帖子,将票证属性留空 如果帖子升级为票证
  • 我可以显式设置 Post 的票证属性以指向父票证。

  • 但是,此映射不会在域级别强制执行。它为 Ticket1 指向 Post1 而 Post1 指向 Ticket2 的情况留有余地。

    我尝试使用 static hasOne = [post: Post]票务 类,但后来了解到它要求存在 static belongsTo = [ticket: Ticket]发帖 类,这成为强制性的 1 对 1 关系,这不是我正在寻找的。

    在这种情况下,有没有办法实现这种一对一的可选映射?任何指针都会是最有帮助的。

    最佳答案

    您可以考虑制作一个自定义验证器,例如

    class Post {
      // Other fields
    
      Ticket ticket
    
      static constraints = {
        // Other constraints
        ticket (nullable:true,unique:true, validator: { val, obj ->
           if(val) {
             return val.post == obj
           }
        })
      }
    }
    

    这会解决你的问题吗?

    关于Grails/GORM : creating one-to-one optional relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7684591/

    相关文章:

    json - Grails:在映射构造函数中设置 transient 字段

    sql - 在 Grails SQL 查询结果中包含列名

    oop - 领域模型、概念模型和业务模型等之间的区别

    asp.net-mvc - AutoMapper 扁平化了领域模型,但它的作用相反吗?如果不是,那是什么?

    Grails 中的 XML 解析

    Grails 脚手架模板

    grails - 在运行时将 Gorm 切换到不同的数据源

    cassandra - 在 Cassandra 中处理一对多

    grails - Grails Jasper报告:未找到表问题

    reactjs - Grails项目与React在我的gradle.build文件中显示错误