Playframework CRUD模块的特殊更新

Playframework CRUD模块的特殊更新,playframework,Playframework,我来自以下链接:。 我成功地将二进制数据存储在数据库中,并将代码放在了我之前放置的链接上。我会把它再放一遍,以便更快地参考: @Column(columnDefinition="BYTEA NOT NULL", nullable=false) @Password public byte[] password; @Required @Password @Transient public String hash; @ManyToOne @Required public Departamento

我来自以下链接:。 我成功地将二进制数据存储在数据库中,并将代码放在了我之前放置的链接上。我会把它再放一遍,以便更快地参考:

@Column(columnDefinition="BYTEA NOT NULL", nullable=false) @Password
public byte[] password;

@Required @Password @Transient
public String hash;

@ManyToOne
@Required
public Departamento departamento;

@PrePersist
@PreUpdate
public void hashPassword() throws Exception {
    this.password = Crypto.passwordHash(this.hash, Crypto.HashType.SHA512).getBytes();
    System.out.println(this.password);
}
现在的问题是我无法更新密码。我更改了显示模板以获得空白模板中的数据,但我根本无法更新数据。 @PreUpdate注释的添加似乎没有按应有的方式工作

我能做什么?如有任何建议,将不胜感激

更新:


正如@grahamrb所建议的,似乎我只需要重写set方法来保存和更新数据。感谢@grahamrb

问题在于与@PreUpdate注释相关的方法仅在某些对象字段值发生更改时调用。但当您尝试更新@Transient字段时,不可能检测到更改,并且该方法未被调用

我遇到了类似的问题,也是我能找到的最好的解决方案——在数据库字段中存储一个代理项值,用于告诉休眠更改。例如:

模型上下文:

控制器上下文:


为什么不去掉hash对象,而重写public void setPassword方法,并将哈希算法放在其中呢?我应该怎么做呢code public void setHashString hash{this.hash=Crypto.passwordHashhash.getBytes;}代码就足够了?我也应该做一个getter吗?
public Long updatingHackHash;

public void renewUpdatingHackHash() {
    this.updatingHackHash = System.currentTimeMillis();
}
public static void save(MyModel myModel) {

    // ...

    myModel.renewUpdatingHackHash();
    myModel.save();

    // ...
}