Ответ
Аннотация @Data из проекта Lombok — это комбинация нескольких аннотаций, которая генерирует стандартный шаблонный (boilerplate) код для класса модели (POJO).
Она автоматически создает:
- Геттеры для всех нестатических полей.
- Сеттеры для всех нестатических не-
finalполей. - Реализацию
toString(). - Реализацию
equals()иhashCode()на основе всех нестатических полей. - Конструктор, принимающий все
finalи неинициализированные не-finalполя (т.н.RequiredArgsConstructor).
Пример использования:
import lombok.Data;
@Data
public class User {
private final Long id;
private String name;
private int age;
}
// Lombok сгенерирует getters, setters (кроме id),
// equals, hashCode, toString и конструктор User(Long id).
Важные предостережения и best practices:
- Не используйте
@Dataдля JPA/Hibernate сущностей. Сгенерированныеequals()иhashCode(), включающие все поля, могут вызвать проблемы с ленивой загрузкой (Lazy Loading) и привести к неожиданному поведению. Для сущностей лучше генерировать эти методы вручную или использовать другие стратегии. - Для создания неизменяемых (immutable) объектов рассмотрите аннотацию
@Value. @Dataделает класс мутабельным (изменяемым) из-за сеттеров. Если это не требуется, используйте более специфичные аннотации (@Getter,@Setter,@ToStringи т.д.).