내용으로 건너뛰기
권남
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
추적:
java:hibernate:usertype
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
====== Hibernate User Type ====== * ''UserType'', ''ParameterizedType'' 을 통해 사용자 정의 타입을 만들 수 있다. * [[https://github.com/vladmihalcea/hibernate-types|vladmihalcea/hibernate-types: The Hibernate Types repository gives you extra types that are not supported by the Hibernate ORM core.]] * [[java:hibernate:usertype:generic_enum|Hibernate Generic Enum UserType]] * [[java:hibernate:usertype:stringdate|StringDate Hibernate UserType]] * [[java:hibernate:usertype:stringboolean|StringBoolean Hibernate UserType]] * UserType의 ''nullSafeSet''과 ''nullSafeGet''에서 값에 대한 로그를 ''trace'' 레벨로 남겨주어 쿼리 결과나 쿼리를 날릴 때의 로그로 해당 값을 Hibernate가 자동으로 남겨주는 다른 값들과 함께 로그로 남긴다. * **''nullSafeGet''/''nullSafeSet''은 ''org.hibernate.type.StandardBasicTypes''의 실제 Type 상수에게 위임해주는 것이 좋다.** * 이 경우 굳이 UserType의 ''nullSafeGet/nullSafeSet''에서 로그를 안 남겨도 알아서 남는다. * [[https://github.com/jamesward/spring_hibernate_hstore_demo|Hibernate PostgresQL HStore]] ===== UserType의 등록 ===== * [[|@org.hibernate.annotations.TypeDef]]와 [[|@org.hibernate.annotations.TypeDefs]]를 통해 사용자 정의 타입에 짧은 이름을 부여해 둘 수 있다. * 위 애노테이션은 Package(package-info.java)나 Entity class 레벨에 부여할 수 있다. * ''package-info.java''에 등록할 경우에는 Hibernate냐 JPA에 따라 패키지 지정작업이 필요하다. * JPA persistence.xml<code xml> <class>com.foo.bar.thepackage</class> </code> * Hibernate cfg.xml<code xml> <resource package="com.foo.bar.thepackage"/> </code> * 패키지에 모든 파라미터까지 포함하여 미리 등록해 두는 것도 가능하다. ''package-info.java''<code 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; </code> <code java> // Entity class // 이제 엔티티 클래스에서는 다음과 같이 간단히 등록 가능 @Type(type = "some_enum") @Column(name = "some_enum", length = 2, nullable = true) private SomeEnum someEnum; </code> ===== Primary Key ===== * Primary Key(Identifier)나 Descriminator(상속관계에서 구분자?)로 사용할 Custom Type은 ''org.hibernate.usertype.EnhancedUserType''를 구현해야 한다. ===== java.time.Year, java.time.Month ===== * [[https://vladmihalcea.com/java-time-year-month-jpa-hibernate/|How to map java.time.Year and java.time.Month with JPA and Hibernate - Vlad Mihalcea]] * 기본적으로는 JPA ''AttributeConverter''를 사용한다. * Hibernate 사용시에는 ''AbstractSingleColumnStandardBasicType''와 ''AbstractTypeDescriptor''로 처리 가능하다. 이에 관한 예제. ===== 참고 ===== * [[https://www.baeldung.com/hibernate-custom-types|Custom Types in Hibernate | Baeldung]]
java/hibernate/usertype.txt
· 마지막으로 수정됨: 2018/10/24 10:26 저자
kwon37xi
문서 도구
문서 보기
이전 판
역링크
맨 위로