본문 바로가기
개발/JPA

[JPA] enum 타입 DB에 저장시 값 변환 / @Converter / AttributeConverter

by Allonsy 2022. 1. 19.
반응형

JPA Entiry 에서 ENUM 타입을 필드로 사용할 때 Converter를 사용하면

DB에 원하는 값으로 변환해서 넣어줄 수 있다

 

# ENUM

public enum Gender {
	MAIL("남자"), FEMAIL("여자");
    
	private final String label;
    
	Gender(String label) {
		this.label = label;
	}
    
	public String getLabel() { return this.label; }
}

 

# CONVERTER

- AttributeConverter<X,Y> 인터페이스를 구현해서 만들어준다

<X> – entity 필드 타입 (Enum타입)
<Y> – DB 컬럼에 저장할 값 타입

public interface AttributeConverter<X,Y> {
	public Y convertToDatabaseColumn (X attribute); // entity attribute -> DB 값    
	public X convertToEntityAttribute (Y dbData); // DB 값 -> entity attribute
}
@Converter
public class GenderConverter implements AttributeConverter<Gender,String> {

	@Override
	public String convertToDatabaseColumn(Gender gender) { return gender.name(); }
    
	@Override
	public Gender convertToEntityAttribute(String name) {
		if(name == null) { return null; }
		return Gender.valueOf(name);
	}

}

 

# ENTITY 

- enum 타입필드에 @Convert 어노테이션을 달아주고 converter 클래스를 명시해준다

@Entity
@Getter
@Setter
public class User {

	@Id
 	@GeneratedValue(strategy= GenerationType.IDENTITY)
 	private Long id;
    
 	private String name;
	
	@Convert(converter = GenderConverter.class)
 	private Gender gender;
	
}
반응형

댓글