我将Spring Boot与Hibernate结合使用。我有一个包含一些凭据的实体:
@Entity
class MyEntity {
@Column(name = "credentials", columnDefinition = "jsonb")
@Type(type = "jsonb")
private Map<String, Object> credentials;
}
每次读取和保存凭据时,我都会使用自定义的“encode(credentials)”和“decode(creentials)”方法,只在数据库中保留编码版本,并在其他任何地方使用解码版本。这就是我的getter的样子:
public Map<String, Object> getCredentials() {
Map<String, Object> encryptedCredentials = decode(this.credentials);
return encryptedCredentials;
}
但出于某种奇怪的原因,它似乎被调用了两次,其中一次(第一次)是隐式调用,调试器并没有就此停止。为什么我认为它被调用了两次?因为当我调试它时
this.credentials
已被解码。然而,当我有这样的getter方法时:
public Map<String, Object> getCredentials() {
Map<String, Object> encryptedCredentials = this.credentials;
return encryptedCredentials;
}
我在调试过程中获得的凭据不会被解密,这意味着getter会被调用两次。奇怪的Hibernate在这里有什么魔力?我应该遵循哪些最佳实践来避免它?