Tengo una entidad que hereda de otra. Por otro lado, estoy usando el proyecto lombok para reducir el código repetitivo, así que puse una @Dataanotación. La anotación @Datacon herencia produce la siguiente advertencia:
Generando implementación equals / hashCode pero sin una llamada a superclase, aunque esta clase no extiende java.lang.Object. Si esto es intencional, agregue
@EqualsAndHashCode(callSuper=false)a su tipo.
¿Es recomendable agregar anotación @EqualsAndHashCode (callSuper = true)o @EqualsAndHashCode (callSuper = false)? Si no se agrega, ¿cuál es callSuper=falseo callSuper=true?

@EqualsAndHashCode(callSuper=true)debería resolver la advertencia.fuente
@EqualsAndHashCoderesuelve la advertencia.La principal pregunta original es:
La respuesta aceptada es básicamente solo:
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:
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.
fuente
Si también desea comparar los miembros de la superclase, utilice
@EqualsAndHashCode(callSuper=true). Sin embargo, si solo desea comparar campos en la clase actual, puede usar@EqualsAndHashCode(callSuper=false)la opción predeterminada .Si usa la función Delombok , puede ver que la diferencia es que cuando se establece en
trueesta línea se agrega al método igual generadoif (!super.equals(o)) return false;. Si tiene miembros en la superclase que deben tenerse en cuenta al comparar dos objetos, entonces debe establecerse en verdadero para comparar correctamente.fuente