【问题标题】:Best way to model map values in Grails?在 Grails 中建模地图值的最佳方法?
【发布时间】:2010-05-17 14:38:39
【问题描述】:

我必须在我的 Grails 应用程序中实现映射值。 我有一个可以包含 0..N 个 OsmTags 的类,并且密钥是唯一的。 在 Java 中,我会在每个对象中使用 Map 对此进行建模,但我不知道如何在 Grails 中映射类。

所以我定义了这个类:

class OsmTag {
    /** OSM tag name, e.g. natural */ 
    String key
    /** OSM tag value, e.g. park */
    String value

    static constraints = {
        key blank:false,    size:2..80,matches:/[\S]+/, unique:false
        value blank:false,  size:1..250,matches:/[\S]+/, unique:false
    }
}

这没问题,但实际上很丑,因为标签键不是唯一的。 有没有更好的方法来模拟这个问题?

干杯

【问题讨论】:

    标签: grails groovy map


    【解决方案1】:

    如果你的标签是简单的字符串,那么你可以使用map directly

    class Taggable {
        Map tags // key : String, value : String
    }
    

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,那么您想确保每个标记在标记实体的特定实例中都是唯一的吗?

      假设附加标签的实体名为Taggable,则 您可以使用自定义约束来强制执行此要求:

      class Taggable {
          static hasMany = [ tags: OsmTag ]
      }
      
      class OsmTag {
      
          static belongsTo = [ taggable: Taggable ]
      
          /** OSM tag name, e.g. natural */ 
          String key
          /** OSM tag value, e.g. park */
          String value
      
          static constraints = {
              key(blank:false,    size:2..80,matches:/[\S]+/, unique:false, 
                  validator: { val, obj ->
                      if (obj.taggable.tags.key.count(val > 1)) {
                          return false 
                      }
                  }
              )
      
              value(blank:false,  size:1..250,matches:/[\S]+/, unique:false)
          }
      }
      

      【讨论】:

        【解决方案3】:

        如果您正在寻找 NoSQL 解决方案,可以尝试使用 MongoDB with Grails。最新版本(1.4)支持Geospatial indexing and querying

        【讨论】:

          猜你喜欢
          • 2010-10-12
          • 2010-10-13
          • 1970-01-01
          • 2014-09-06
          • 2019-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多