관리 메뉴

피터의 개발이야기

[Spring] @Transient 본문

Programming/Spring

[Spring] @Transient

기록하는 백앤드개발자 2020. 12. 2. 08:30
반응형

 

 

엔티티의 변수들은 테이블 컬럼과 매핑된다.

@Getter
@Setter
@ToString
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class UserEntity {
    // 고유키
    private Long userId;
    // 페이데이 사용자 ID
    private Long paydayUserId;
    // 비밀번호
    private String password;
    // 사용자명
    private String name;
    // 이메일
    private String email;
    // 전화번호
    private String phone;
}

 

하지만 비지니스 로직을 수행하기 위해 컬럼에 없는 변수가 발생하기도 한다.

예를 들어 회원가입 시에 패스워드 확인용 변수를 하나 더 받아야 한다.

이럴 때에 엔티티를 손상시키지 않으려면 엔티티를 상속 받은 VO를 만들면 된다.

@Getter
@Setter
@ToString
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
public class AccountVo extends UserEntity {
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String beforePassword;
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String changePassword;
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
    private String confirmPassword;
}

 

하지만 JPA를 쓸 때에는 다르다.

@Transient를 이용하여 디비컬럼과 상관없이  엔티티의 특정 변수를 영속 필드에서 제외할 때 사용한다.

@Entity
@Table(name = "USER")
public class UserEntity {
    // 고유키
    private Long userId;
    // 페이데이 사용자 ID
    private Long paydayUserId;
    // 비밀번호
    private String password;
    // 사용자명
    private String name;
    // 이메일
    private String email;
    // 전화번호
    private String phone;
    
    @Transient
    private String confirmPassword;

 

UserEntity 클래스의 confirmPassword는 디비상에 저장할 필요가 없다.

반응형
Comments