默认情况下,在创建域类时,它会自动为所有域类(表)添加“id”和“version”列。如果我想添加一个列,例如,例如,该怎么办? “isChecked”,这应该自动添加到所有域类(即表),类似于添加“id”和“version”列。如何实现这一点,如果我不想为特定的域类提供“isChecked”,我也应该能够做到这一点。
如何在Grail 1.3.7中执行此操作?
谢谢。 杰伊·钱德兰
编辑:我可以获得更多输入吗?建议的答案没有用!
答案 0 :(得分:3)
你可以使用Groovy为这类东西提供的元编程魔法,但是,我可能只是去一个更典型的路径并使用继承。创建一个包含isChecked(以及您需要的任何其他内容)的父域,并让您的域需要它们扩展该类。
答案 1 :(得分:0)
我建议创建一个修改(添加属性)域工件的插件。您可以阅读有关plugins and artifacts的更多信息。然后,您可以轻松添加静态属性(例如,静态nochecked = true),以过滤掉您不希望根据需要添加新属性的域工件。
答案 2 :(得分:-1)
您可以使用元编程来完成此操作。添加属性的代码应该在插件的doWithDynamicMethods
闭包中运行,或者从Bootstrap.groovy
运行。如果使用插件方法,这样的事情应该有效:
def doWithDynamicMethods = {ctx ->
application.domainClasses
.findAll {it.simpleName.startsWith('S')}.metaClass.each {domainMetaClass ->
Integer fooVal = 0
domainMetaClass.getFoo = {-> fooVal}
domainMetaClass.setFoo = {Integer newFooVal -> fooVal = newFooVal}
}
}
上面的代码应该为名称以“S”开头的每个域类添加Integer foo
属性。我没有测试过这段代码,所以它可能不起作用。要查看一个您可以更自信的示例:
doWithDynamicMethods
闭包