在Grails中建模贴图值的最佳方法?
我必须在Grails应用程序中实现映射值。 我有一个可以包含0..N个OSMTag的类,并且密钥是唯一的。 在Java中,我会用每个对象中的映射来建模,但我不知道如何在Grails中映射类 所以我定义了这个类:在Grails中建模贴图值的最佳方法?,grails,groovy,map,Grails,Groovy,Map,我必须在Grails应用程序中实现映射值。 我有一个可以包含0..N个OSMTag的类,并且密钥是唯一的。 在Java中,我会用每个对象中的映射来建模,但我不知道如何在Grails中映射类 所以我定义了这个类: class OsmTag { /** OSM tag name, e.g. natural */ String key /** OSM tag value, e.g. park */ String value static constraint
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)
}
}
如果标记是简单字符串,则可以使用
如果您正在寻找NoSQL解决方案,可以尝试使用。最新版本(1.4)支持
class Taggable {
Map tags // key : String, value : String
}