[英]Object null at Entity's @Override Equals Method
我目前正在开发公司的项目之一。 我使用JSF和PrimeFaces。 根据项目要求,我使用PrimeFaces SelectOneMenu来显示员工列表,如下所示...
<p:selectOneMenu id="employee" value="#{employeeBean.employee}"
converter="employeeConverter">
<f:selectItem itemLabel="" itemValue="" />
<f:selectItems value="#{employeeBean.employeeList}" var="emp"
itemLabel="#{emp.name}" itemValue="#{emp}" />
</p>
这是我的员工对象的等于方法...
@Override
public boolean equals(Object obj) {
if (!(obj instanceOf Employee)) {
return false;
}
Employee employee = (Employee) obj;
return this.id.equals(employee.getId());
}
如果创建雇员对象Employee employee = new Employee();
在雇员豆初始化方法@PostConstruct public void init(){}
由表示的雇员对象this
变为零。 如果我不创建员工对象,那么一切都会很好。 为什么? 我不知道。 非常感谢你的帮助!
这条线
return this.id.equals(employee.getId());
不是null安全的。 当id
为null
,它仍将抛出NPE,这可能是您使用new
运算符手动创建实体实例而不设置其任何属性,而不是通过JPA方式从数据库获取实例的情况。 相应地修复它:
return id != null ? id.equals(employee.id) : employee == this;
请注意,我还通过添加employee == this
提高比较的反射性。 另请参见equals()
合约的第一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.