카테고리 없음

Spring Boot, JPA에서 boolean 처리 (@Converter, @Convert 사용)

광82 2023. 9. 27. 09:01
반응형

엔티티에서는 java의 boolean을 사용하고, Database에서는 Y 또는 N으로 처리하고 싶을때, @Converter 어노테이션을 사용하여 해결할 수 있다.

 

1. 컨버터 객체 생성

BooleanToYNConverter.java

@Converter
public class BooleanToYNConverter implements AttributeConverter<Boolean, String> {

  /**
   * Boolean 값을 Y 또는 N 으로 컨버트
   *
   * @param attribute boolean 값
   * @return String true 인 경우 Y 또는 false 인 경우 N
   */
  @Override
  public String convertToDatabaseColumn(Boolean attribute) {
    return (attribute != null && attribute) ? "Y" : "N";
  }

  /**
   * Y 또는 N 을 Boolean 으로 컨버트
   *
   * @param yn Y 또는 N
   * @return Boolean 대소문자 상관없이 Y 인 경우 true, N 인 경우 false
   */
  @Override
  public Boolean convertToEntityAttribute(String yn) {
    return "Y".equalsIgnoreCase(yn);
  }
}

 

1.1. 참고. AttributeConverter 인터페이스

convertToDatabaseColumn()와 convertToEntityAttribute() 가 있는데, 각각 아래와 같은 역할을 함

  • convertToDatabaseColumn(): database 값으로 변환 (예시: true -> "Y")
  • convertToEntityAttribute(): Entity의 값으로 변환 (예시: "Y" -> true)

AttrivuteConverter 인터페이스

 

2. Entity에 컨버터 적용

다시 엔티티로 돌아와서, 적용하고 싶은 필드에 @Convert 어노테이션을 붙인다.

@Entity
@Table(name = "member")
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@ToString
public class Member {

  ...중략...
  
  @Convert(converter = BooleanToYNConverter.class)
  private boolean isActive;
}

 

반응형