사용자 도구

사이트 도구


java:hibernate:dialect

Hibernate Dialect

registerHibernate

  • registerHibernateType은 Hibernate 컬럼의 기본 매핑타입을 지정한다.
  • 현재 추측으로는 SQL Query에서 SELECT의 결과로 나오는 값의 타입이 JDBC의 java.sql.Types 중에 어떤 것일 경우, 해당 타입을 Hibernate의 org.hibernate.type.Type 중 어떤 것으로 변환해야하는지에 대한 정보로 보인다.
  • org.hibernate.dialect.Dialect 참조
  • 예를 들어 다음 선언은 select 해온 컬럼이 JDBC에서 type이 Types.CHAR 일경우 Hibernate가 StandardBasicTypes.CHARACTER에게 그 값을 읽는 역할을 맡기게 되는 식?
    registerHibernateType( Types.CHAR, StandardBasicTypes.CHARACTER.getName() );

registerColumnType

  • 이 메소드는 Entity에 정의하는 컬럼 타입선언으로 보인다.
  • 예를들어 아래 내용은 java.util.Date 컬럼에 대해서 테이블을 생성할 때 datetime(6) 로 선언하지 않을까?
    registerColumnType( Types.TIMESTAMP, "datetime(6)" );

function

  • dialect 클래스에서 registerFunction을 호출하여 사용자 정의 함수를 등록할 수 있다.
  • Custom function is Hibernate | marzapol 사용자 정의 함수 추가
  • 파라미터가 있는 것 없는 것 등 다양하게 선언한다.

org.hibernate.dialect.Dialect#getMaxAliasLength

  • 'org.hibernate.dialect.Dialect#getMaxAliasLength'' 는 SQL 생성시 table 이나 column의 alias 의 글자수 제한을 결정한다.
  • 문제는 일부 DB의 경우(Oracle Database) 이를 byte 단위로 계산한다.
  • 즉, oracle 은 30글자로 제한돼 있는데, 한글의 경우 인코딩에 따라 3byte, 2byte 왔다갔다 하므로 Java에서는 한글을 1글자로 계산하고, DB는 3글자로 계산하는등 맞지 않는 문제가 발생한다.
  • 그냥 짧게 max 10 으로 override 하는게 좋을 것 같다.
java/hibernate/dialect.txt · 마지막으로 수정됨: 2020/08/21 13:55 저자 kwon37xi