Поля JPA @Transient очищаются перед вызовом метода @PreUpdateJAVA

Программисты JAVA общаются здесь
Anonymous
Поля JPA @Transient очищаются перед вызовом метода @PreUpdate

Сообщение Anonymous »

У меня есть класс 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, если это имеет какое-то значение)

Подробнее здесь: https://stackoverflow.com/questions/341 ... -is-called

Вернуться в «JAVA»