La principal pregunta original es:
¿Es aconsejable agregar la anotación @EqualsAndHashCode (callSuper = true) o @EqualsAndHashCode (callSuper = false)?
La respuesta aceptada es básicamente solo:
...eso depende...
Para ampliar eso, la documentación sobre @EqualsAndHashCode tiene una guía sólida sobre la cual elegir. Especialmente esto, en mi humilde opinión:
Al establecer callSuper en verdadero, puede incluir los métodos equals y hashCode de su superclase en los métodos generados. Para hashCode, el resultado de super.hashCode () se incluye en el algoritmo hash, y forequals, el método generado devolverá falso si la super implementación piensa que no es igual al objeto pasado. Tenga en cuenta que no todas las implementaciones iguales manejan esta situación correctamente. Sin embargo, las implementaciones de iguales generadas por lombok manejan esta situación correctamente, por lo que puede llamar de forma segura a su superclase igual si también tiene un método igual generado por lombok.
Para resumir un poco esto: Elija 'callSuper = true' si está heredando de una superclase que no tiene información de estado, o está usando la anotación @Data, o tiene implementaciones de equals / hash que "manejan la situación correctamente" - lo que interpreto que significa devolver un hash adecuado de los valores del estado.