250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- CHECK OPTION
- 다대일
- exclusive lock
- 데코레이터
- 다대다
- BOJ
- 동적sql
- PS
- SQL프로그래밍
- 지연로딩
- 힙
- JPQL
- fetch
- querydsl
- 즉시로딩
- shared lock
- dfs
- eager
- 백트래킹
- 일대다
- 비관적락
- 스프링 폼
- 연결리스트
- FetchType
- execute
- 연관관계
- 유니크제약조건
- 스토어드 프로시저
- 낙관적락
- 이진탐색
Archives
- Today
- Total
흰 스타렉스에서 내가 내리지
[JPA] 엔티티의 데이터를 변환해서 DB 에 저장하는 @Converter 본문
728x90
예를 들어, 북마크 여부를 boolean 타입으로 사용하고 싶다고 하자.
JPA 를 사용하면 DB에 저장될 때 0 또는 1인 숫자로 저장된다.
그런데 DB 에 숫자 대신 문자 Y 또는 N 으로 저장하고 싶다면 컨버터를 사용하면 된다.
@Entity
public class Member {
...
@Convert(converter=BooleanToYNConverter.class)
private boolean bookmarked;
...
}
- Boolean 을 YN 으로 변환해주는 컨버터
@Converter
public class BooleanYNConverter implements AttributeConverter<Boolean, String>{
@Override
public String convertToDatabaseColumn(Boolean attribute){
return (attribute != null && attribute) ? "Y" : "N";
}
@Override
public String convertToEntityAttribute(String dbData){
return "Y".equals(dbData);
}
}
- 컨버터 클래스는 @Converter 어노테이션을 사용하고 AttributeConverter 인터페이스를 구현해야 한다.
- 그리고 제네릭에 현재 타입과 반환할 타입을 지정해야 한다.
- 여기서는 <Boolean, String> 을 지정해서 Boolean 타입을 String 타입으로 변환한다.
- AttributeConverter
public interface AttributeConverter<X, Y> {
public Y convertToDatabaseColumn (X attribute);
public X convertToEntityAttribute (Y dbData);
}
- convertToDatabaseColumn() : 엔티티의 데이터를 데이터베이스 컬럼에 저장할 데이터로 변환한다.
- convertToEntityAttribute() : 데이터베이스에서 조회한 컬럼 데이터를 엔티티의 데이터로 변환한다.
# 글로벌 설정
- 모든 Boolean 타입에 컨버터를 적용하려면 다음과 같이 @Converter(autoApply = true) 옵션을 적용해준다.
@Converter(autoApply = true)
public class BooleanYNConverter implements AttributeConverter<Boolean, String>{
@Override
public String convertToDatabaseColumn(Boolean attribute){
return (attribute != null && attribute) ? "Y" : "N";
}
@Override
public String convertToEntityAttribute(String dbData){
return "Y".equals(dbData);
}
}
- 이렇게 글로벌 설정을 하면 @Convert 를 지정하지 않아도 모든 Boolean 타입에 대해 자동으로 컨버터가 적용된다.
@Entity
public class Member {
...
private boolean bookmarked;
...
}
'JPA' 카테고리의 다른 글
[Spring-data-JPA] 벌크성 수정 쿼리 (0) | 2024.04.25 |
---|---|
[JPA] Spring-data-JPA 의 메소드 이름으로 쿼리 생성 (0) | 2024.04.25 |
[JPA] N+1 문제 (실은 1+N 문제) (0) | 2024.04.25 |
트랜잭션 범위의 영속성 컨텍스트 (0) | 2024.04.25 |
[JPA] 영속성 컨텍스트와 JPQL (0) | 2024.04.25 |