我们需要HyperJAXB生成的hashCode和equals方法吗?

Mar*_*eon 1 java hyperjaxb

我们使用HyperJAXB生成了一些(很多)类.所有类都实现了Equals和HashCode,并具有下面的实现风格.看来这个代码永远不会执行..有什么特别的原因我们需要这个代码吗?如果可以的话,我正在寻求简化课程.

   public boolean equals(Object object) {
        if (!(object instanceof MyClass)) {
            return false;
        }
        if (this == object) {
            return true;
        }
        final EqualsBuilder equalsBuilder = new JAXBEqualsBuilder();
        equals(object, equalsBuilder);
        return equalsBuilder.isEquals();
    }

    public void hashCode(HashCodeBuilder hashCodeBuilder) {
        hashCodeBuilder.append(this.getValue());
        hashCodeBuilder.append(this.getId());
    }

    public int hashCode() {
        final HashCodeBuilder hashCodeBuilder = new JAXBHashCodeBuilder();
        hashCode(hashCodeBuilder);
        return hashCodeBuilder.toHashCode();
    }
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 5

如果您的应用程序或JAXB基础结构曾将这些对象的实例放入集合或映射中,则很可能使用equalshashCode方法.

编辑

我在hyperjaxb3文档中找到了以下内容:

生成equals和hashCode方法

虽然这不是JPA规范直接要求的,但仍建议在实体类中正确实现equals和hashCode方法.[...]使用Hyperjaxb3,您可以配置,等于和哈希码构建器将被使用或关闭equals和hashCode生成关闭.

因此应该可以关闭这些方法的生成,但hyperjaxb3设计师似乎在说最好不要这样做.

  • 如果某事调用`List.contains(...)`,则会调用`equals`方法. (2认同)

lex*_*ore 5

您可以使用

<generateEquals>false</generateEquals>
<generateHashCode>false</generateHashCode>
Run Code Online (Sandbox Code Playgroud)

在你的maven-hyperjaxb3-plugin配置中,如果要禁用equals/hashCode方法生成.但是我不建议.

真诚的,"hyperjaxb3设计师".:)