JB Nizet 有一个有效的观点。在 Http 响应中检索和序列化它是两个独立的问题。
我不确定你用什么来序列化你的数据。如果这是一个 REST API,请考虑 Jackson 的@JsonIgnore
注释或 Eclipselink MOXy 的@XmlTransient
等价物。如果这使用 Java EL(facelets,jsps),您应该能够只选择感兴趣的 bean 属性。
如果您确实必须在检索期间执行此操作,请考虑 JPQL 的/Criteria API 的构造函数功能。确保对象具有接受指定参数的构造函数,并记住,如果以这种方式检索它,它将不会在持久性上下文中进行管理。
SELECT NEW my.package.User(u.id, u.name, u.etc) FROM User u
或者,考虑@PostLoad
生命周期回调。
@PostLoad
private void postLoad() {
this.password = null;
}
最后,情况可能并非如此,但我想强调密码不应该以明文形式存储的概念。我之所以提到这一点,是因为返回使用安全算法(bCrypt、多次迭代 SHA-512 等)的哈希加盐密码并不是什么大不了的事(但仍然不理想)。