Recent Posts
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 | 31 |
Tags
- python
- tolerated
- JanusWebRTCServer
- kotlin
- JanusWebRTC
- 개성국밥
- table not found
- addhooks
- Spring Batch
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- 티스토리챌린지
- PersistenceContext
- Value too long for column
- 오블완
- terminal
- 깡돼후
- 자원부족
- taint
- 코루틴 컨텍스트
- 겨울 부산
- 코루틴 빌더
- mp4fpsmod
- JanusGateway
- vfr video
- 달인막창
- PytestPluginManager
- VARCHAR (1)
- pytest
- JanusWebRTCGateway
- preemption #
Archives
너와 나의 스토리
[SpringBoot] JPA Converter 적용 / Converter null 처리 본문
반응형
JPA Converter 사용법
- Member라는 entity가 있고, member는 role을 가진다.
- role은 enum으로 선언되어 있는데, 디비에는 int형으로 member의 role을 저장하고, 불러올 때는 다신 MemberRoleType으로 가져오려고 한다.
1. ConvertibleEntity를 implements하여 member role을 매핑할 enum 객체를 만든다.
@Getter
public enum MemberRoleType implements ConvertibleEntity<MemberRole> {
Owner(1) {
@Override
public MemberRole asModel() {
return MemberRole.Owner;
}
}, Member(2) {
@Override
public MemberRole asModel() {
return MemberRole.Member;
}
};
...
}
- MemberRole: 도메인 영역에서 사용하는 member role enum 객체
2. DB에 저장된 int형을 MemberRoleType으로 변환해 줄 Converter 생성
@Converter
public class MemberRoleTypeConverter implements AttributeConverter<MemberRoleType, Integer> {
@Override
public Integer convertToDatabaseColumn(MemberRoleType attribute) {
return attribute.getCode();
}
@Override
public MemberRoleType convertToEntityAttribute(Integer dbData) {
return MemberRoleType.of(dbData);
}
}
3. Entity 필드 위에 @Convert 어노테이션 붙이기
@Entity
@Table(name = "member")
...
public class MemberEntity extends TimeAuditingEntity implements ConvertibleEntity<Device> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "nick_name", unique = true, nullable = false)
private String nickName;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "role", nullable = false)
@Convert(converter = MemberRoleTypeConverter.class)
private MemberRoleType role;
...
}
Converter NULL 처리하는 방법
- MemberRoleType을 나중에 추가하여 이미 디비에 해당 필드 없이 값들이 들어있다면, 실행 시 에러가 발생한다.
- 이러한 문제로 MemberRoleType을 nullable하게 수정하여 작업을 할 수 있을 것이다.
- 하지만, 이렇게 하면 MemberRoleType을 convert하는 과정에서 MemberRoleType이 null인 경우 에러가 발생하게 된다.
- 이때, MemberRoleType이 null이여도 convert하기 위해서는 MemberRoleTypeConverter를 다음과 같이 수정해야 한다.
@Converter
public class AllocatorTypeConverter implements AttributeConverter<AllocatorEntityType, Integer> {
@Override
public Integer convertToDatabaseColumn(AllocatorEntityType attribute) {
return attribute != null ? attribute.getCode() : null;
}
@Override
public AllocatorEntityType convertToEntityAttribute(Integer dbData) {
return dbData != null ? AllocatorEntityType.of(dbData) : null;
}
}
반응형
'개발 > Spring Boot' 카테고리의 다른 글
Comments