// the following setter does not work
void Example::setName(const string aName){
name = aName;"
Конечно, нет. Вы объявили name
как const
, поэтому вы не можете назначить его (вы можете только инициализировать его). Удалите const
из name
, и ваш сеттер будет работать.
Hibernate будет обрабатывать типы, помеченные как «изменяемые», как если бы они могли изменяться (т.е. требовать ОБНОВЛЕНИЯ) без указания на новую ссылку. Если вы назначите новую ссылку на свойство, загруженное Hibernate, Hibernate распознает это, даже если тип неизменяемый - это происходит постоянно, например, с полями String. Но если, скажем, у вас есть поле StringBuilder и вы пометите его как неизменяемое , Hibernate не не заметит, если вы измените StringBuilder.
См. это сообщение в блоге ] для получения дополнительных сведений и образца проекта.
Типичным примером здесь является Строковый класс - это Неизменно, т.е. после того как строка создается, Вы не можете изменить ее содержание или состояние, и если Вы хотите затем, Вы оказываетесь перед необходимостью обрабатывать его в новую копию.
возврат isMutable верного означает, что Вы говорите, что этому объекту могли изменить его состояние внешние объекты, возвращение лжи означает, что необходимо будет скопировать этот объект в новый экземпляр, делающий изменения для утверждения по пути. Или поскольку Вы сказали: "это означает объект, который содержит ссылку на экземпляр этого класса, никогда не будет указывать на другой экземпляр".