通常当我向域对象添加辅助方法时,我在编译时遇到错误,解析为“找不到x属性”。方法名称getX
,setX
以及最近isX
似乎都会发生这种情况。我应该避免使用名单的清单吗?有没有办法注释或标记这些方法,所以Grails不会将它们与自动属性混淆?
答案 0 :(得分:7)
Grails自动检测属性并假设它们是持久的。 Groovy中的公共字段在引擎盖下创建了一个getter和setter,因此假定getter与持久字段相关联。
但是如果你想要一个以'get'或'is'开头但不是持久字段的getter的辅助方法,你有两个选择。一种是使用transients
列表 - 请参阅http://grails.org/doc/latest/ref/Domain%20Classes/transients.html
另一种选择是将返回值声明为def
。因为它没有键入(def是Object的别名)所以Hibernate不能保留它,因为它不知道要使用什么数据类型,所以它被忽略了。
我的偏好是transients
列表,因为我宁愿使用自我记录的方法来显示它们的作用,它们接受的参数类型以及返回的内容。
答案 1 :(得分:0)
我不知道常见的清单 - 它太多样了。常规方法由Groovy和Grails的不同部分添加:
getX()
方法,并且没有x
属性的读取权限。methodMissing
, propertyMissing
,$staticMethodMissing
,getProperty
,properties
等等; as<Type>()
方法,例如asInteger()
; 要访问声明的字段,而不是getter / setter,请使用java field access operator。
答案 2 :(得分:0)
据我了解你的问题,你可以使用瞬态!
static transients = ['feildName']