Giriş
Normalde @Data anotasyonu bizim için equals() ve hashCode() metodlarını üretir. Ancak @Data tüm alanlar için üretir. Eğer daha kontrollü bir şey yapmak istiyorsak, @EqualsAndHashCode kullanılır.
callSuper Alanı - Kalıtım Varsa
Örnek
Eğer "Generating equals/hashCode implementation but without a call to superclass ..." şeklinde uyarı alıyorsak, ve ata sınıfın equals(), hashCode() metodlarını kullanmak istemiyorsak callSuper = false yaparız. Şöyle yaparız.
Eğer "Generating equals/hashCode implementation but without a call to superclass ..." şeklinde uyarı alıyorsak, ve ata sınıfın equals(), hashCode() metodlarını kullanmak istemiyorsak callSuper = false yaparız. Şöyle yaparız.
@Data
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
public abstract class ContentModel implements Serializable {
private int pointId;
private LocalDate saveDate;
}
onlyExplicitlyIncluded Alanı
Örnek - Sadece Belirtilen Alanlar İçin
Şöyle yaparız
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class User {
@EqualsAndHashCode.Include
private Long identity;
}
Hangi alanın kullanılacağını belirtir. Bu tür string alan şeyleri kullanmamak lazım. Onun yerine @EqualsAndHashCode(onlyExplicitlyIncluded = true) tercih edilmeli
Örnek
Şöyle yaparız.
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false, of = "naturalKey")
@Builder
public class Person implements IEntityModel<PersonNaturalKey> {
private Long id;
private PersonNaturalKey naturalKey = new PersonNaturalKey();
private String age;
}
Hiç yorum yok:
Yorum Gönder