5

以下 grails 域类:

class MyClass {
  Map myMap
}

现在对于 myMap,grails 会自动为地图中的元素创建一个新表。但是,如果我添加了太长的元素(例如 1024 个字符),则会出现数据库错误。

我可以以某种方式告诉 grails 使 myMap 表中的相应列足够大以允许更大的字符串,还是我必须在数据库中手动执行此操作?

我已经试过了

static constraints = {
  myMap(maxSize:1024)
}

这不起作用(正如预期的那样,因为 maxSize 应该引用 Map 的值而不是 Map 本身)。

如果不是通过约束,也许有办法通过

static mapping { ... }

?

4

2 回答 2

5

我成功使用的另一种方法是将地图推送到协作者域类的集合中。

class DynaProperty {
    String name
    String value

    static belongsTo = MyClass
    static constraints = {
        value(maxSize:4000)  //Or whatever number is appropriate
    }
}

然后在 MyClass 中:

class MyClass {
    static hasMany = [dynaProperties:DynaProperty]
}

几乎是一张地图,它使您能够使用动态查找器来提取单个条目。

于 2010-07-13T19:14:16.943 回答
0

你想达到什么目的?地图上总是有相同数量的东西吗?如果有,您应该在您的类上定义这些属性。

您可以看到当前方法的问题——在运行时之前无法弄清楚地图中可能存在什么,那么 grails 怎么可能为它创建列呢?我很惊讶它甚至开始工作......

于 2010-07-13T14:06:39.823 回答