====== 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''을 호출하여 사용자 정의 함수를 등록할 수 있다.
* [[http://marzapol.wordpress.com/2013/07/23/custom-function-is-hibernate/|Custom function is Hibernate | marzapol]] 사용자 정의 함수 추가
* 파라미터가 있는 것 없는 것 등 다양하게 선언한다.
===== org.hibernate.dialect.Dialect#getMaxAliasLength =====
* 'org.hibernate.dialect.Dialect#getMaxAliasLength'' 는 SQL 생성시 table 이나 column의 alias 의 글자수 제한을 결정한다.
* 문제는 일부 DB의 경우([[database:oracle|Oracle Database]]) 이를 byte 단위로 계산한다.
* 즉, oracle 은 30글자로 제한돼 있는데, 한글의 경우 인코딩에 따라 3byte, 2byte 왔다갔다 하므로 Java에서는 한글을 1글자로 계산하고, DB는 3글자로 계산하는등 맞지 않는 문제가 발생한다.
* 그냥 짧게 max 10 으로 override 하는게 좋을 것 같다.
* [[https://prismoskills.appspot.com/lessons/Hibernate/Chapter_23_-_Hibernate_alias_names.jsp|Hibernate Alias Names - PrismoSkills]]