【发布时间】:2012-03-02 11:21:50
【问题描述】:
假设我的应用程序中有类似于域类的类,其中包含一些 Long、Double、Date 和 String 字段。这些类扩展了基类,具有一些通用字段和一些通用方法。每当我访问 String 的类字段(虽然是 getter)时,我都想对返回的值进行一些更改(例如删除 html 标签)。有没有比为 String 类型的每个字段实现 getter 更好的方法?继承的字段呢?
【问题讨论】:
假设我的应用程序中有类似于域类的类,其中包含一些 Long、Double、Date 和 String 字段。这些类扩展了基类,具有一些通用字段和一些通用方法。每当我访问 String 的类字段(虽然是 getter)时,我都想对返回的值进行一些更改(例如删除 html 标签)。有没有比为 String 类型的每个字段实现 getter 更好的方法?继承的字段呢?
【问题讨论】:
不要更改 Grails 为您创建的默认 getter/setter 实现。您肯定会在各个地方弄乱您的应用程序。 Grails 使用约定优于配置,因此 getter/setter 绝对应该保持不变。
创建您自己的方法来返回您想要的内容:为字段标题创建方法 getStrippedTitle()。您也可以将此方法添加到瞬态。
【讨论】:
如果您更改设置的值,或返回与设置不同的值,您会混淆 Hibernate。这是因为当你从数据库中加载一个实例时,Hibernate 将原始数据保存在它的一级缓存中,并返回一个域对象实例给你。当你刷新时,它会将当前状态与原始状态进行比较,如果它发生了变化,它会将更改推送到数据库中。因此,如果您返回的值与设置的值不同,但并未真正更改该值,Hibernate 将无法区分。
您最好不理会属性并创建返回更改数据的方法。我使用的一种约定是,例如,如果您有一个 String body 字段,则可以通过属性名称 body 或 getter getBody() 访问它,但您可以创建 Hibernate 不知道的 body() 方法并返回你想要的任何东西。
【讨论】: