【发布时间】:2013-08-28 02:34:12
【问题描述】:
如何将字符串类型字段添加到类(即该类的所有实例),如 grails 将 id 和版本字段添加到所有域类?如果可能,如何指定字段类型为 String / Long 等
编辑:
添加的字段不会在 DB 中更新。如何让它们持久化?
【问题讨论】:
-
我相信插件使用 AST grails.org/plugin/audit-trail 为审计跟踪做了类似的事情。我们是否值得看看这个源代码
如何将字符串类型字段添加到类(即该类的所有实例),如 grails 将 id 和版本字段添加到所有域类?如果可能,如何指定字段类型为 String / Long 等
编辑:
添加的字段不会在 DB 中更新。如何让它们持久化?
【问题讨论】:
对于 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"
【讨论】:
DefaultGrailsDomainClass 并添加 customField 然后尝试访问域类。 Here is a discussion about the same topic 这可能会对您有所帮助。在给出任何具体答案之前,我也会自己尝试一下。将更新我的答案以反映 Groovy 的上下文。
对于您的用例,您也许可以使用普通继承:
abstract class Base {
// common fields
// constraints for those fields
// etc.
}
class MyDomain extends Base {
}
【讨论】: