====== 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]]