← Назад к вопросам
Какая аннотация исключает поле 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 — явное игнорирование при маппинге
Выбор аннотации зависит от контекста использования поля и слоя приложения, где оно применяется.