Как динамически обновить настройки столбца поля сущности во время выполнения? - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть класс модели сущности с именем Customer, в котором есть следующий столбец поля, в котором хранится хэш пароля пользователя, сгенерированный PgCrypto в Postgresql:

@Entity(name = "customers")
@Table(name = "customers")
public class Customer implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = -3265467376787297897L;

    @JsonIgnore
    @Id
    @GeneratedValue(generator = "user_id_generator")
    @SequenceGenerator(name = "user_id_generator", sequenceName = "user_id_sequence", initialValue = 1)
    private Long id;
    private String email;
    //@JsonIgnore
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    @ColumnTransformer(write = "digest(?, 'sha512')", read = "encode(password, 'hex')")
    @Column(columnDefinition = "bytea", updatable = false)
    private String password;
    @ColumnTransformer(write = "pgp_sym_encrypt(?, current_setting('encrypt.key'), 'cipher-algo=aes128')", read = "pgp_sym_decrypt(phone, current_setting('encrypt.key'), 'cipher-algo=aes128')")
    @Column(columnDefinition = "bytea")
    private String phone;
    @ColumnTransformer(write = "pgp_sym_encrypt(?, current_setting('encrypt.key'), 'cipher-algo=aes128')", read = "pgp_sym_decrypt(address, current_setting('encrypt.key'), 'cipher-algo=aes128')")
    @Column(columnDefinition = "bytea")
    private String address;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

Теперь у меня возникла проблема при сохранении любого другогополя через хранилище класса модели сущностей Customer для пользователя, он также сохранит хэш пароля, генерируя новый хэш пароля, хранящийся в базе данных.Есть ли способ сказать Spring, чтобы он игнорировал определенное поле при сохранении модели объекта или есть ли способ обновить настройки столбца, например, изменить «обновляемый» в аннотации «Столбец»?

...