繁体   English   中英

实体的@Override Equals方法处的对象为null

[英]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安全的。 idnull ,它仍将抛出NPE,这可能是您使用new运算符手动创建实体实例而不设置其任何属性,而不是通过JPA方式从数据库获取实例的情况。 相应地修复它:

return id != null ? id.equals(employee.id) : employee == this;

请注意,我还通过添加employee == this提高比较的反射性。 另请参见equals()合约的第一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM