使用getter样式方法名称将业务逻辑添加到域类

时间:2010-05-27 10:22:16

标签: grails groovy

我正在尝试向grails域类添加方法,例如

class Item {

  String name

  String getReversedName() {
    name.reverse()
  }

}

当我尝试使用grails控制台加载应用程序时,出现以下错误:

  

引起:org.springframework.beans.factory.BeanCreationException:创建名为'sessionFactory'的bean时出错:init方法的调用失败;嵌套异常是org.hibernate.PropertyNotFoundException:在类Item中找不到属性reversedName的setter       ......还有18个

看起来Hibernate将getReversedName()解释为属性的getter,但是在这种情况下它是派生字段,因此不应该持久化。显然,在我的实际代码中,我所暴露的业务逻辑更为复杂,但与此问题无关。我希望能够在我的代码/ gsps中调用item.reversedName。

如果没有Grails尝试使用Hibernate映射它,我如何在Grails域类中提供对方法的属性(getter)访问?

1 个答案:

答案 0 :(得分:11)

我相信你有两个选择:

1)使用def

def getReversedName() {
  name.reverse()
}

2)在域对象的顶部添加一个瞬态声明:

 static transients = [ 'reversedName' ] 

[edit] (我会选择#1)(我会选择#2); - )