У меня есть класс User Entity, для которого я пытаюсь выполнить хеширование пароля. Я подумал, что самый простой способ сделать это - создать поле пароля, аннотированное @Transient, и поле хешированного пароля, которое устанавливается непосредственно перед сохранением объекта, с помощью метода, аннотированного @PrePersist и @ PreUpdate.
Итак, у меня есть что-то вроде этого:
@Transient
private String password;
private String hashedPassword;
@PrePersist
@PreUpdate
private void hashPassword() {
if(password != null) {
hashedPassword = PasswordHasher.hashPassword(password);
}
}
Это прекрасно работает, когда сущность сохраняется. Поле пароля все еще устанавливается к моменту вызова hashPassword, а значение для hashedPassword вычисляется и сохраняется.
Однако то же самое не верно для обновления - даже если новое значение для пароля установлено непосредственно перед объединением объекта, поле является нулевым к моменту вызова hashPassword. Почему это? Разве значения переходных полей не должны оставаться, по крайней мере, до тех пор, пока сущность не будет сохранена?
(кстати, я использую EclipseLink 2.0.0, если это имеет какое-либо значение)