【问题标题】:Groovy / Grails dynamically add a String type fieldGroovy / Grails 动态添加 String 类型字段
【发布时间】:2013-08-28 02:34:12
【问题描述】:

如何将字符串类型字段添加到类(即该类的所有实例),如 grails 将 id 和版本字段添加到所有域类?如果可能,如何指定字段类型为 String / Long 等

编辑:

添加的字段不会在 DB 中更新。如何让它们持久化?

【问题讨论】:

标签: grails groovy


【解决方案1】:

对于 POGO,您可以使用 ExpandoMetaClass 添加/覆盖属性/字段/构造函数。

class Foo{
   String bar
}

//Add a field to Foo at runtime
//Type is set to String in this case
Foo.metaClass.baz = "Hello World"

//Add a method to Foo at runtime
Foo.metaClass.doSomething = {String str -> str.reverse()}

assert new Foo().baz == "Hello World"
assert new Foo().doSomething("Hello") == "olleH"

【讨论】:

  • 它不会是持久的,所以不是域类属性的候选者
  • @BurtBeckwith 我假设 OP 以域类为例,而不是实际尝试向域类添加属性。更倾向于问题中的“groovy”标签。我可能错了。
  • hm,实际上我想为所有域类添加一些通用属性。如何让他们坚持下去?
  • @user2463026 我没有尝试过,但我会从 grails-core 扩展 DefaultGrailsDomainClass 并添加 customField 然后尝试访问域类。 Here is a discussion about the same topic 这可能会对您有所帮助。在给出任何具体答案之前,我也会自己尝试一下。将更新我的答案以反映 Groovy 的上下文。
【解决方案2】:

对于您的用例,您也许可以使用普通继承:

abstract class Base {
  // common fields
  // constraints for those fields
  // etc.
}

class MyDomain extends Base {
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 2010-10-13
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多