사용자 도구

사이트 도구


java:hibernate:usertype

문서의 이전 판입니다!


Hibernate User Type

  • UserType, ParameterizedType 을 통해 사용자 정의 타입을 만들 수 있다.
  • UserType의 nullSafeSetnullSafeGet에서 값에 대한 로그를 trace 레벨로 남겨주어 쿼리 결과나 쿼리를 날릴 때의 로그로 해당 값을 Hibernate가 자동으로 남겨주는 다른 값들과 함께 로그로 남긴다.
  • nullSafeGet/nullSafeSetorg.hibernate.type.StandardBasicTypes의 실제 Type 상수에게 위임해주는 것이 좋다.
    • 이 경우 굳이 UserType의 nullSafeGet/nullSafeSet에서 로그를 안 남겨도 알아서 남는다.

UserType의 등록

  • @org.hibernate.annotations.TypeDef@org.hibernate.annotations.TypeDefs를 통해 사용자 정의 타입에 짧은 이름을 부여해 둘 수 있다.
  • 위 애노테이션은 Package(package-info.java)나 Entity class 레벨에 부여할 수 있다.
  • package-info.java에 등록할 경우에는 Hibernate냐 JPA에 따라 패키지 지정작업이 필요하다.
    • JPA persistence.xml
      <class>com.foo.bar.thepackage</class>
    • Hibernate cfg.xml
      <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;

Primary Key

  • Primary Key(Identifier)나 Descriminator(상속관계에서 구분자?)로 사용할 Custom Type은 org.hibernate.usertype.EnhancedUserType를 구현해야 한다.

java.time.Year, java.time.Month

참고

java/hibernate/usertype.1540343947.txt.gz · 마지막으로 수정됨: 2018/10/24 10:19 저자 kwon37xi