본문 바로가기
IT 개발/JPA

[JPA] Boolean 값을 Y, N 값으로 사용하기 - 2

by 이것 저것 모든것 2024. 9. 4.
728x90

전체 엔티티에 Boolean to Y/N 변환을 적용하는 방법에 대해 설명해 드리겠습니다. 이를 위해 JPA의 글로벌 컨버터 설정을 사용할 수 있습니다.

먼저, 기존의 BooleanToYNConverter 클래스를 약간 수정하여 글로벌 컨버터로 만들겠습니다:

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter(autoApply = true)
public class BooleanToYNConverter implements AttributeConverter<Boolean, String> {

    @Override
    public String convertToDatabaseColumn(Boolean attribute) {
        return (attribute != null && attribute) ? "Y" : "N";
    }

    @Override
    public Boolean convertToEntityAttribute(String dbData) {
        return "Y".equals(dbData);
    }
}

 

여기서 주목할 점은 @Converter 어노테이션에 autoApply = true 옵션을 추가한 것입니다. 이 옵션은 JPA에게 모든 Boolean 타입 필드에 이 컨버터를 자동으로 적용하도록 지시합니다.

이제 이 설정을 적용하는 방법은 사용하는 JPA 구현체에 따라 약간 다를 수 있습니다. 대표적인 두 가지 방법을 소개해 드리겠습니다:

  1. Hibernate를 사용하는 경우:

persistence.xml 파일에 다음 속성을 추가합니다:

<persistence-unit name="your-persistence-unit">
    <!-- 다른 설정들 -->
    <properties>
        <property name="hibernate.hbm2ddl.auto" value="update"/>
        <property name="hibernate.archive.autodetection" value="class"/>
        <property name="hibernate.show_sql" value="true"/>
        <!-- 여기에 컨버터 패키지를 추가합니다 -->
        <property name="hibernate.annotatedClasses" value="com.yourpackage.BooleanToYNConverter"/>
    </properties>
</persistence-unit>
 
  1. Spring Boot with JPA를 사용하는 경우:

@EntityScan 어노테이션을 사용하여 컨버터 클래스를 스캔하도록 설정합니다:

import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@EntityScan(basePackages = {"com.yourpackage.entities", "com.yourpackage.converters"})
public class JpaConfig {
}
 

이렇게 설정하면, 모든 엔티티의 Boolean 타입 필드에 자동으로 BooleanToYNConverter가 적용됩니다.

이제 엔티티 클래스에서는 별도의 @Convert 어노테이션 없이 Boolean 필드를 사용할 수 있습니다:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class SomeEntity {

    @Id
    private Long id;

    private Boolean active;  // 자동으로 Y/N으로 변환됩니다.

    // 생성자, getter, setter 등
}
 
 

이 방법의 장점은 다음과 같습니다:

  • 모든 엔티티에 일관된 변환 로직을 적용할 수 있습니다.
  • 각 엔티티 클래스마다 @Convert 어노테이션을 추가할 필요가 없어 코드가 간결해집니다.
  • 새로운 엔티티를 추가할 때도 별도의 설정 없이 자동으로 변환이 적용됩니다.

주의할 점은, 일부 Boolean 필드에 대해 다른 변환 로직이 필요한 경우 해당 필드에 @Convert 어노테이션을 사용하여 개별적으로 다른 컨버터를 지정할 수 있다는 것입니다. 이 경우 개별 필드의 설정이 글로벌 설정보다 우선합니다.

이 방법을 통해 프로젝트 전체에 걸쳐 Boolean 값을 일관되게 Y/N으로 변환하여 사용할 수 있습니다.

728x90