← Назад к вопросам

Какая аннотация исключает поле DTO из маппинга?

1.0 Junior🔥 171 комментариев
#Коллекции#ООП#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Исключение полей DTO из маппинга

Основная аннотация: @Transient

В контексте ORM-фреймворков (Hibernate, JPA) аннотация @Transient исключает поле из маппинга с базой данных и не создаёт для него столбец в таблице:

import javax.persistence.Transient;

public class UserDTO {
    private Long id;
    private String name;
    
    @Transient
    private String temporaryData; // Это поле не будет маппиться
}

MapStruct и другие мапперы

Для маппинга между DTO/Entity с помощью MapStruct используется аннотация @Mapping с параметром ignore:

@Mapper
public interface UserMapper {
    @Mapping(target = "password", ignore = true)
    @Mapping(target = "internalId", ignore = true)
    UserDTO entityToDTO(User user);
}

Jackson (JSON сериализация)

Для исключения поля при преобразовании JSON используется @JsonIgnore:

public class UserDTO {
    private Long id;
    private String name;
    
    @JsonIgnore
    private String internalField;
}

Практический пример

// JPA Entity
@Entity
@Table(name = "users")
public class User {
    @Id
    private Long id;
    private String name;
    
    @Transient  // Не маппится в БД
    private String calculatedValue;
}

// DTO для API
public class UserResponse {
    private Long id;
    private String name;
    
    @JsonIgnore  // Исключается из JSON
    private LocalDateTime createdAt;
}

Итого

  • @Transient — исключает из маппинга JPA (БД)
  • @JsonIgnore — исключает из JSON-сериализации
  • @Mapping(ignore=true) в MapStruct — явное игнорирование при маппинге

Выбор аннотации зависит от контекста использования поля и слоя приложения, где оно применяется.

Какая аннотация исключает поле DTO из маппинга? | PrepBro