Изменение возвращаемого значения получателей полей String - PullRequest
3 голосов
/ 02 марта 2012

Допустим, в моем приложении есть классы, похожие на классы домена, с некоторыми полями Long, Double, Date и String.Эти классы расширяют базовый класс некоторыми общими полями и несколькими общими методами.Всякий раз, когда я получаю доступ к полю класса (хотя получателю), которое является String, я хочу внести некоторые изменения в возвращаемое значение (например, удалить теги html).Есть ли лучший способ, чем делать реализации геттеров для каждого поля типа String?А как насчет унаследованных полей?

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Если вы измените установленное значение или вернете значение, отличное от установленного, вы запутаете Hibernate. Это связано с тем, что при загрузке экземпляра из базы данных Hibernate сохраняет исходные данные в своем кэше 1-го уровня и возвращает вам экземпляр объекта домена. Когда вы сбрасываете, он сравнивает текущее состояние с исходным, и если он изменился, он помещает изменения в базу данных. Поэтому, если вы возвращаете значение, отличное от установленного, но не меняете его, Hibernate не может определить разницу.

Вам гораздо лучше оставить свойства в покое и создать методы, которые возвращают измененные данные. Я использовал одно соглашение: если, например, у вас есть поле String body, вы можете получить к нему доступ через имя свойства body или получатель getBody(), но вы можете создать метод body(), который неизвестен Hibernate. и возвращает все, что вы хотите.

1 голос
/ 02 марта 2012

Не изменяйте стандартные реализации getter / setter, созданные для вас Grails.Вы определенно испортите ваше приложение в разных местах.Grails использует соглашение о конфигурации, поэтому методы получения / установки определенно должны остаться неизменными.

Создайте свои собственные методы, которые возвращают то, что вы хотите: для заголовка поля создайте метод getStrippedTitle ().Вы также можете добавить этот метод к переходным процессам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...