【问题标题】:Counting relationships in many to many relationships in grails在grails中计算多对多关系中的关系
【发布时间】:2014-11-02 06:47:06
【问题描述】:

我在 grails 域类中有一个多对多的关系。

class Book {

   static hasMany = [tags:Tag]

   static mapping = {
   }

   static constraints = {
   }

   static transients = []

   String bookTitle
}

class Tag {

   static hasMany = [books:book]
   static belongsTo = [Book]

   static mapping ={
   }
   static constraints = {
   }

   String name  
}

我想添加一个瞬态来存储一本书是否有任何标签。

有什么办法吗?例如,

 def hasAnyRelation

最终我需要创建一个标准来显示已标记/未标记的书籍。

【问题讨论】:

  • 对于“如果一本书有任何标签”,您可以使用:bookInstance.tags.size()>0
  • 这相当昂贵 - 加载整个实例集合只是为了计算它们然后将它们丢弃
  • 有没有更简单的方法?标准如何? Book.createCriteria.list() { } ?

标签: grails many-to-many


【解决方案1】:

创建这种类型的关系是非常糟糕的 grails 设计。不要以两种方式连接多对多关系。您可以创建属于书籍或多本书的标签。但是书不必知道这种关系。当您想查询标记的书籍时,您只需查询标记。如果您担心性能,您可以随时缓存结果。

【讨论】:

    【解决方案2】:

    试试size限制createCriteria,点赞

    用于标记书籍

    Book.createCriteria.list() { 
        sizeGe("tags", 1)
    } 
    

    对于未标记的书籍

    Book.createCriteria.list() { 
        sizeEq("tags", 0)
    }
    

    【讨论】:

    • isEmptyisNotEmpty 怎么样? :)
    • isEmptyisNotEmpty 太棒了,谢谢..,.
    猜你喜欢
    • 2012-08-17
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    相关资源
    最近更新 更多