grails - 在Grails中为 map 值建模的最佳方法?

标签 grails groovy map

我必须在Grails应用中实现 map 值。
我有一个可以包含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
    }
}

可以,但是实际上非常丑陋,因为标签键不是唯一的。
有没有更好的方法来对此问题建模?

干杯

最佳答案

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

假设标签所附加的实体名为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)
    }
}

关于grails - 在Grails中为 map 值建模的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2849940/

相关文章:

regex - Grails g :tags does not support the doller($) sign in regex for pattern ? 为什么?

grails - 从 Grails BootStrap.groovy 和插件描述符发送日志消息

Groovy 2.1.9 中的闭包递归

cmath 函数的 C++ 映射

安卓 4.1 : How to "implement user installable keymaps"?

map - 无法从 map 分配给结构成员

grails - java.sql.SQLException : Invalid column index in groovy service class

grails - 从 grails 的 lib 文件夹中读取 jar 文件

linux - 为什么 RPC 调用在从 Linux 上的 Groovy 调用的 C 程序中失败?

java - 使用 java "no such file or directory"运行 groovy 编译类的 Bash 错误