JPA为空不更新注释



我有一个名为User的实体对象,它代表具有典型用户信息(包括密码)的应用程序用户。我为每个用户信息提供了编辑选项,通过该选项,用户可以编辑和更新自己的信息。其中一个编辑字段是password,但我将其保留为空字段,即只有用户才能输入他的新密码,而不能看到他/她的当前密码。我想为用户提供在他/她不想更改密码时不输入密码的选项。不幸的是,当Hibernate将密码字段保持为空时,他用一个空字符串作为密码来更新用户对象。我正在寻找一个JPA注释,通过它我对Hibernate说,当密码字段为null或为空时,不要更新它。

有人知道可能的办法吗?

最佳

您不希望在页面上显示用户的密码。好的但解决方案不是从User对象中删除密码!就领域模型而言,这没有任何意义;它把用户界面需求推得太远了。

相反,您应该让密码正常加载,而不是在页面上显示它。然后,您需要在页面和处理密码更新的User对象之间编写一些自定义逻辑。

  • 为类定义实体侦听器以通过@EntityListeners实现回调事件,然后可以在@PreUpdate方法中检查空/空字符串等。

  • 实现CCD_ 3接口&用户更新克隆的对象,然后如果需要,可以仅将所需的更改应用回原始实体&将其持久化。这样,以前的字段(密码)将不受影响。

  • 可以有一个带有@Transient的临时字段作为密码,因为它没有被检索或保存在数据库中,可以用于编辑页面。若其已更改,则将其复制到持久字段,否则不会影响数据库作为其瞬态。

最新更新