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로 처리 가능하다. 이에 관한 예제.