UserType
, ParameterizedType
을 통해 사용자 정의 타입을 만들 수 있다.nullSafeSet
과 nullSafeGet
에서 값에 대한 로그를 trace
레벨로 남겨주어 쿼리 결과나 쿼리를 날릴 때의 로그로 해당 값을 Hibernate가 자동으로 남겨주는 다른 값들과 함께 로그로 남긴다.nullSafeGet
/nullSafeSet
은 org.hibernate.type.StandardBasicTypes
의 실제 Type 상수에게 위임해주는 것이 좋다.nullSafeGet/nullSafeSet
에서 로그를 안 남겨도 알아서 남는다.package-info.java
에 등록할 경우에는 Hibernate냐 JPA에 따라 패키지 지정작업이 필요하다.<class>com.foo.bar.thepackage</class>
<resource package="com.foo.bar.thepackage"/>
package-info.java
@TypeDefs({ @TypeDef(name = "some_enum", typeClass = GenericEnumUserType.class, parameters = { @Parameter(name = "enumClass", value = "kr.pe.kwonnam.usertype.SomeEnum"), @Parameter(name = "identifierMethod", value = "toShortName"), @Parameter(name = "valueOfMethod", value = "fromShortName") }) }) package kr.pe.kwonnam.usertype; import org.hibernate.annotations.Parameter; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs;
// Entity class // 이제 엔티티 클래스에서는 다음과 같이 간단히 등록 가능 @Type(type = "some_enum") @Column(name = "some_enum", length = 2, nullable = true) private SomeEnum someEnum;
org.hibernate.usertype.EnhancedUserType
를 구현해야 한다.AttributeConverter
를 사용한다.AbstractSingleColumnStandardBasicType
와 AbstractTypeDescriptor
로 처리 가능하다. 이에 관한 예제.