티스토리 뷰

카테고리 없음

TIL 220812

minji_6119 2022. 8. 12. 02:02

AttributeConverter

 

당신은 커피가 땡긴다 리펙터링 중, 잔의 사이즈 / 용량 단위 / 재료 와 같이 Enum 객체가 필요한 부분이 늘었다. Enum을 어떻게 효율적으로 저장하고 불러올 수 있는지 고민하던 중 AttributeConverter의 존재를 알게 되었다.

1. Enum 객체 생성

@Getter
public enum Category {
    BASE("원액", 1L),
    MILK("우유", 2L),
    WATER("물/얼음", 3L),
    CREAM("크림", 4L),
    SYRUP("시럽", 5L);

    private final String category;
    private final Long code;

    Category(String category, Long code) {
        this.category = category;
        this.code = code;

    }

    public static Category ofCode(Long dbData) {
        return Arrays.stream(Category.values())
                .filter(v -> v.getCode().equals(dbData))
                .findAny()
                .orElseThrow(() -> new IllegalArgumentException("존재하지 않는 카데고리 코드입니다."));
    }
}

2. AttributeConverter를 implements 하여 Converter 객체 생성

@Converter
public class CategoryConverter implements AttributeConverter<Category, Long> {
    @Override
    public Long convertToDatabaseColumn(Category category) {
        return category.getCode();
    }

    @Override
    public Category convertToEntityAttribute(Long dbData) {
        return Category.ofCode(dbData);
    }
}
** 주의 **
AttributeConverter<X, Y> 의
X는 Entity Attribute
Y는 Database Column이며, Y에는 기본 타입(int, double)이 사용 불가능 하다. 

3. Entity 클래스에 @Convert 어노테이션으로 컬럼 추가

@Entity
@Getter
@RequiredArgsConstructor
public class Ingredient {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    @Column(name = "INGREDIENT_ID")
    private Long id;

    @Convert(converter = CategoryConverter.class)
    private Category category;

 

@JsonBackReference와 @JsonManagedReference

 

  • @JsonManagedReference
    • 양방향 관계에서 정방향 참조할 변수에 어노테이션을 추가하면 직렬화에 포함된다
  • @JsonBackReference
    • 양방향 관계에서 역방향 참조로 어노테이션을 추가하면 직렬화에서 제외된다

 

직렬화(Serializable)란?

객체를 데이터스트림으로 만드는것이다. 객체 자체를 영속적으로 보관할때 사용하는데 파일형태로 저장되어 네트워크를 통해 전송이 가능하다.

직렬화 방법

- 표형태의 다량데이터를 직렬화 할때 CSV형태

- 구조적인 데이터는 XML, JSON형태

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함