1- люди рандомно не делают
2 - рандом как раз легко и вычисляется из-за равномерного распределения
userRepository.save(user);
user.changeFirstname('John2'); // проверяем вход => записываем в User.firstname
геттеры нужны на случай если исходное имя поля изменится, чтобы ничего в публичном апи не сломалось.
Это понятно, но изменяться будет он-же, он же и хранит логику для полей.
Прокси хорошо - но от дублирования не спасает, а это основная проблема сейчас.
Потеряется user.field, user.v.field странно выглядит.
Это не имеет отношения к самому тсу.