Поля 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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