Как уже упоминали другие, если вы аннотируете метод получения свойства, то Hibernate использует этот метод при чтении значений из базы данных. По сути, Hibernate предполагает, что все, что он записывает в базу данных, в конечном итоге необходимо будет прочитать из базы данных. Это подразумевает, что если вы аннотируете геттер, то он должен вызывать сеттер при чтении объекта из базы данных.
Вы можете сделать установщик частным (Hibernate будет использовать отражение для доступа к установщику). Это отличный способ сохранить контракт вашего класса, все еще используя Hibernate для реляционного отображения.
Если поле получено из других свойств класса, то почему вы храните его в базе данных? Вы можете использовать аннотацию @Transient
, чтобы отметить поле, которое не должно храниться в базе данных. Вы даже можете использовать аннотацию @Formula
, чтобы Hibernate извлек поле для вас (это делается с помощью формулы в запросе, который он отправляет в базу данных).