Лучший способ смоделировать значения карты в Grails?

Я должен реализовать значения карты в своем приложении Grails. У меня есть класс, который может содержать 0.. N OsmTags и ключ уникально. В Java я смоделировал бы это с Картой в каждом объекте, но я не знаю как к классам сопоставления в 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
    }
}

Это работает хорошо, но это на самом деле довольно ужасно, потому что ключ тега не уникален. Существует ли лучший способ смоделировать эту проблему?

Удачи

1
задан Mulone 17 May 2010 в 14:38
поделиться

3 ответа

Если я правильно понял ваш вопрос, то вы хотите убедиться, что каждый тег уникален в пределах определенного экземпляра помеченного объекта?

Предположим, что объект, к которому прикреплены теги, называется 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
ответ дан 3 September 2019 в 00:30
поделиться

Если ваши теги - простые строки, то вы можете использовать map напрямую.

class Taggable {
    Map tags // key : String, value : String
}
2
ответ дан 3 September 2019 в 00:30
поделиться

Если вы ищете NoSQL решение, вы можете попробовать использовать MongoDB с Grails. Последняя версия (1.4) поддерживает геопространственное индексирование и запросы.

0
ответ дан 3 September 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: