Grails领域构造不Groovy的构造
问题描述:
执行这项和平的代码Grails领域构造不Groovy的构造
class DefObject{
String a
def b
}
def c = new DefObject(a:1, b:2);
产生的Grails和Groovy中不同的结果。
Groovy的
assert c.a == 1
assert c.b == 2
Grails领域类
assert c.a == 1
assert c.b == null
我怎样才能让Grails领域接受b
值?
答
这是因为在域类中,只能通过映射构造函数设置“可绑定”属性。您可以覆盖属性是否可绑定(例如,id
属性不是出于安全原因,但如果您知道自己在做什么,则可以将其配置为)。
像b
这样的非类型属性并不是持久的,因为如果仅使用def
或Object
指定,GORM/Hibernate无法知道如何存储数据。所以它们不可绑定,因为它们不是持久的,并且它们被自定义映射构造函数忽略。
这是一个方便的功能,其他原因,例如,它允许new DefObject(params)
工作而不抱怨params
映射中不对应于域类中的属性的查询参数,例如, controller
和action
。使用Groovy构造函数,如果对键值与类属性不对应的映射有值,则会抛出groovy.lang.MissingPropertyException
,但这些值在域类中将被忽略。
谢谢,伯特,很高兴知道。这使我在这个问题上的意图变得复杂 - http://*.com/questions/43544783/adapt-field-to-store-to-database。 – zatziky