我有一个名为User的实体对象,它代表具有典型用户信息的应用程序用户,包括密码。 我已经为每个用户信息提供了编辑选项,该用户可以编辑和更新他的信息。 其中一个编辑字段是密码,但我将其保留为空字段,只有用户可以输入新密码而无法查看他/她当前的密码。我想为用户提供在他/她不想更改密码时不输入密码的选项。 不幸的是,当他将密码字段保持为空时,Hibernate用空字符串作为密码更新用户对象。 我正在寻找一个JPA注释,我告诉Hibernate当它为空或空时不更新密码字段。
有没有人知道可行的方法?
最佳
答案 0 :(得分:1)
您不想在页面上显示用户的密码。精细。但解决方案不是从User对象中删除密码!这在域模型方面没有任何意义;它推迟了用户界面要求。
相反,您应该正常加载密码,而不是在页面上显示密码。然后,您需要在页面和处理密码更新的User对象之间编写一些自定义逻辑。
答案 1 :(得分:0)
为您的类定义实体监听器以实现@EntityListeners
的回调事件,然后您可以在@PreUpdate
方法中检查空/空字符串等。
实施Cloneable
界面&用户更新克隆的对象,然后如果需要,只能将所需的更改应用回原始实体&坚持下去。这样,以前的字段(密码)将不受影响。
密码可以包含@Transient
的临时字段,因为它未在数据库中检索或保留,可用于编辑页面。如果更改了,请将其复制到持久字段,否则不会影响数据库的瞬态。