2010-05-17 50 views
1

我必須在我的Grails應用程序中實現地圖值。 我有一個類可以包含0..N OsmTags,而且這個鍵是唯一的。 在Java中,我會用每個對象中的Map來建模,但我不知道如何映射Grails中的類。在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 
    } 
} 

這工作不錯,但它實際上是相當難看,因爲標籤的關鍵不是唯一的。 有沒有更好的方法來模擬這個問題?

乾杯

回答

0

如果我正確理解你的問題,那麼你要確保每個標籤是標籤實體的特定實例中是唯一的?

假設實體被附上的標籤被命名爲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) 
    } 
} 
+0

是的,這好多了! 謝謝 – Mulone 2010-05-17 16:14:24

2

如果你的標籤是簡單的字符串,那麼你可以使用一個map directly

class Taggable { 
    Map tags // key : String, value : String 
} 
相關問題