본문 바로가기

개발

하이버네이트 커스텀 벨류 타입 - 2

반응형

이번 포스팅에서는 소스 코드를 통해 완성된 사례를 살펴보고, 다음 포스팅에서 자세한 원리를 다뤄 보도록 하겠습니다

 

먼저 다음과 같이 입맛에 맞게 Age라는 객체를 정의하였습니다

package pkgPath;

public class Age {
    private final int age;

    public Age(int age) {
        if (age<0 || age>200) {
            throw new RuntimeException("올바른 나이 범위를 벗어난 입력 입니다");
        }
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public Age plusAge() {
        return new Age(age+1);
    }
}

원시 데이터 타입을 단순히 래핑한 형태로 특별한 기능은 없습니다(그냥 이상한 범위 짤라주는 것이 끝...)

 

아래와 같이 엔티티를 정의합니다

@Entity
@TypeDef( name = "age", defaultForType = Age.class, typeClass = AgeType.class )
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @Id @GeneratedValue
    private Long id;

    private Age age;

}

 

하이버네이트의 타입을 활용하여 객체를 데이터로, 데이터를 객체로 매핑하는 자세한 내용은 다음 포스팅에서 다루겠습니다

 

우선 위와 같이 커스텀한 Age객체를 활용하여 엔티티를 만들어 줍니다

 

이후 레포지토리를 이용하여 save 메소드를 호출하게 된다면, 올바른 값에 대해서는 정상적으로 디비에 입력이 되고, 그렇지 않은 범위의 값에 대해서는 런타임익셉션을 출력해줍니다

반응형