JPA @Transient在调用方法之前清除@PreUpdate字段
2022-09-03 15:41:07
我有一个用户实体类,我正在尝试为其执行密码哈希。我认为最简单的方法是创建一个用@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 btw,如果它有任何区别的话)