如何在grails域类中调整Map的约束/数据库映射

时间:2010-07-13 13:00:40

标签: database grails mapping hibernate-mapping grails-domain-class

关注grails域类:

class MyClass {
  Map myMap
}

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

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

我已经尝试了

static constraints = {
  myMap(maxSize:1024)
}

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

如果不是通过约束,也许可以通过

来实现
static mapping { ... }

2 个答案:

答案 0 :(得分: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]
}

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

答案 1 :(得分:0)

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

您可以看到当前方法的问题 - 在运行时之前无法确定地图中可能存在的问题,那么grails如何为它创建列?我很惊讶它甚至开始工作......