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

Jör*_*yer 5 database mapping grails hibernate-mapping grails-domain-class

关注grails域类:

class MyClass {
  Map myMap
}
Run Code Online (Sandbox Code Playgroud)

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

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

我已经试过了

static constraints = {
  myMap(maxSize:1024)
}
Run Code Online (Sandbox Code Playgroud)

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

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

static mapping { ... }
Run Code Online (Sandbox Code Playgroud)

Mat*_*man 5

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

class DynaProperty {
    String name
    String value

    static belongsTo = MyClass
    static constraints = {
        value(maxSize:4000)  //Or whatever number is appropriate
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在MyClass中:

class MyClass {
    static hasMany = [dynaProperties:DynaProperty]
}
Run Code Online (Sandbox Code Playgroud)

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