代码之家  ›  专栏  ›  技术社区  ›  Jörg Brenninkmeyer

如何在Grails域类中调整映射的约束/db映射

  •  5
  • Jörg Brenninkmeyer  · 技术社区  · 14 年前

    以下Grails域类:

    class MyClass {
      Map myMap
    }
    

    现在对于mymap,grails会自动为映射中的元素创建一个新表。但是,如果添加的元素太长(例如1024个字符),我会得到一个db错误。

    我能告诉Grails让mymap表中的相应列足够大以允许使用更大的字符串吗,或者我必须在数据库中手动这样做吗?

    我已经试过了

    static constraints = {
      myMap(maxSize:1024)
    }
    

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

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

    static mapping { ... }
    

    ?

    2 回复  |  直到 14 年前
        1
  •  5
  •   Matt Lachman    14 年前

    我成功使用的另一种方法是将映射推出到合作者域类的集合中。

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

    然后在我的课堂上:

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

    这是 几乎 一个地图,它让你能够使用动态查找器来提取一个单独的条目。

        2
  •  0
  •   hvgotcodes    14 年前

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

    您可以看到当前方法的问题——在运行时之前,无法找出映射中可能存在的内容,所以Grails如何可能为其创建列?我很惊讶,它甚至开始起作用…