Hibernate의 타입
자 바 객체의 프로퍼티 타입과 테이블의 컬럼 타입은 정확하게 일치하지 않는다. 예를 들어, 자바의 java.lang.String 타입의 프로퍼티가 SQL의 VARCHAR로 매핑될 수도 있고, CHAR로 매핑될 수도 있다. Hibernate는 이러한 타입의 불일치 문제를 해결하기 위해서 Hibernate 자체적으로 타입을 제공하고 있으며, 이 타입을 사용해서 자바의 타입과 SQL 타입 사이의 매핑 문제를 해결하고 있다.
Hibernate가 제공하는 매핑 타입은 자바의 기본 데이터 타입, 날짜 및 시간 관련 타입, 대량 데이터 관련 타입 등이 존재한다. 이들 타입은 property 태그나 id 태그 등 프로퍼티와 컬럼 사이의 매핑 정보를 표시하는 부분에서 사용되며, 이 타입 정보를 통해 Hibernate는 OR 매핑을 올바르게 처리할 수 있게 된다.
자바 기본 데이터 타입 매핑
자바의 기본 데이터 타입의 매핑을 처리해주는 Hibernate 타입은 다음과 같다.
매핑 타입 |
자바 타입 |
SQL 타입 |
---|---|---|
integer |
int 또는 java.lang.Integer |
INTEGER |
long |
long 또는 java.lang.Long |
BIGINT |
short |
short 또는 java.lang.Short |
SMALLINT |
float |
float 또는 java.lang.Float |
FLOAT |
double |
double 또는 java.lang.Double |
DOUBLE |
big_decimal |
java.math.BigDecimal |
NUMERIC |
character |
java.lang.String |
CHAR(1) |
string |
java.lang.String |
VARCHAR |
byte |
byte 또는 java.lang.Byte |
TINYINT |
boolean |
boolean 또는 java.lang.Boolean |
BIT |
yes_no |
boolean 또는 java.lang.Boolean |
CHAR(1) ('Y' 또는 'N') |
true_false |
boolean 또는 java.lang.Boolean |
CHAR(1) ('T' 또는 'F') |
날짜 및 시간 타입 매핑
자바의 날짜 및 시간 타입의 매핑을 처리해주는 Hibernate 타입은 다음과 같다.
매핑 타입 |
자바 타입 |
SQL 타입 |
---|---|---|
date |
java.util.Date 또는 java.sql.Date |
DATE |
time |
java.util.Time 또는 java.sql.Time |
TIME |
timestamp |
java.util.Timestamp 또는 java.sql.Timestamp |
TIMESTAMP |
calendar |
java.util.Calendar |
TIMESTAMP |
calendar_date |
java.util.Calendar |
DATE |
대량 데이터 관련 매팅 타입
바이너리 데이터와 대량 데이터를 처리할 때 사용되는 Hibernate 타입은 다음과 같다.
매핑 타입 |
자바 타입 |
SQL 타입 |
---|---|---|
binary |
byte |
VARBINARY (또는 BLOB) |
text |
java.lang.String |
CLOB |
serializable |
java.io.Serializable를 구현한 모든 자바 클래스 |
VARBINARY (또는 BLOB) |
clob |
java.sql.Clob |
CLOB |
blob |
java.sql.Blob |
BLOB |
JDBC 드라이버중에 clob이나 blob의 경우는 지원하지 않은 경우도 있으므로, clob과 blob을 사용할 때에는 먼저 JDBC 드라이버가 해당 타입을 지원하는지의 여부부터 확인해야 한다.
키 값 생성기
앞서 예로 들었던 OR 매핑 설정 파일의 일부를 다시 한번 살펴보자.
|
위 코드에서 id 태그는 테이블의 PK 컬럼과 매핑을 처리할 때 사용된다고 했으며, 새롭게 생성한 자바 객체를 테이블에 저장할 때 사용할 키값은 generator 태그에서 명시한 클래스를 통해서 생성된다. generator 태그는 키값을 생성할 클래스와 클래스가 사용할 파라미터 값을 전달하는데 사용되며, 보통 다음과 같은 형태를 갖는다.
|
클래스 이름에는 net.sf.hibernate.id.IdentifierGenerator 인터페이스를 구현한 클래스의 완전한 이름을 적어주면 된다. Hibernate는 몇가지 형태의 키값 생성기를 기본적으로 제공하고 있으며, 이들 생성기를 짧은 이름을 통해서 사용할 수 있도록 하고 있다. 다음은 Hibernate가 제공하는 기본 키값 생성기의 이름이다.
- increment : 정수 타입의 키 값을 사용할 경우, 키 값을 1씩 증가시켜 생성한다.
- identity : 테이블의 식별 컬럼을 지원한다. (예, MySQL의 auto_increment 컬럼)
- sequence : 시퀀로부터 키 값을 가져온다. (예, 오라클의 시퀀스)
- hilo / seqhilo : hi/lo 알고리즘을 사용하여 정수값 키값을 생성한다.
- uuid.string / uuid.hex : UUID 알고리즘을 사용하여 키값을 생성한다.
- native : DBMS 및 테이블에 알맞은 키값 생성기를 자동 선택한다.
- assigned : 어플리케이션에 직접 키값을 생성한다.
- foreign : 연관 객체의 식별자를 키값으로 사용한다.
PK 연관에서 주로 사용된다.
increment 생성기
increment는 DBMS에 상관없이 사용할 수 있는 키값 생성기로서 long, short, int 타입의 식별값을 생성한다. increment 생성기는 파라미터 값을 필요로 하지 않으며, 다음과 같이 사용할 수 있다.
|
클러스터(cluster)에서는 사용하면 안 된다.
identity 생성기
DB2, MySQL, MS SQL 서버, Sybase 그리고 HypersonicSQL의 식별 컬럼을 지원한다. (예를 들어, MySQL의 auto_increment 컬럼) 리턴된 식별값의 타입은 long, short, int 중 하나이다. increment 생성기와 마찬가지로 파라미터를 필요로 하지 않으며, 다음과 같이 생성기의 이름만 지정해주면 된다.
|
sequence 생성기
DB2, 오라클, PostgreSQL, SAP DB, McKoi의 시퀀스나 Interbase의 generator를 사용해서 키값을 생성한다. 리턴된 식별자의 타입은 long, short, int 중 하나이다. sequence 생성기는 아래와 같이 sequence 파라미터로부터 사용할 시퀀스의 이름을 전달받는다.
|
hilo / seqhilo 생성기
hilo 생성기는 hi/lo 알고리즘을 사용한다. 알고리즘에서 hi 값을 읽어올 때 사용할 테이블과 컬럼의 이름을 table 파라미터와 column 파라미터로부터 읽어온다. (테이블과 컬럼의 이름을 명시하지 않을 경우 기본값은 테이블 이름은 'hi_value'이고 컬럼 이름은 'next_value'이다.) 또한 hi/lo 알고리즘에서 사용될 값을 max_lo 파라미터로부터 읽어온다. hilo 생성기는 long, short, int 타입의 식별값을 생성한다. 다음은 hilo 생성기의 사용예이다.
|
hilo 생성기를 사용할 때 주의할 점은 테이블이 미리 생성되어 있어야 하며, 테이블이 한개의 레코드가 존재해야 한다는 점이다. 또 다른 주의점은, 데이터베이스 Connection을 세션에 직접 제공하거나 또는 JTA를 사용하기 위해서 어플리케이션 서버가 제공하는 DataSource를 사용하는 경우에는 hilo 생성기를 사용할 수 없다는 점이다.
seqhilo 생성기는 hilo 생성기와 비슷하나 알고리즘에서 사용할 값을 테이블이 아닌 시퀀스로부터 읽어온다는 차이점이 있다. 시퀀스의 이름은 sequence 파라미터로부터 전달받는다. 다음은 seqhilo 생성기의 사용예이다.
|
uuid.string / uuid.hex 생성기
uuid.string 생성기와 uuid.hex 생성기는 128비트 UUID 알고리즘을 사용하여 string 타입의 값을 생성한다. 차이점은 다음과 같다.
- uuid.string - 16 개의 ASCII 글자로 구성된 식별값을 생성한다. PostgreSQL에서는 사용해서는 안 된다
- uuid.hex - 32 개의 16진수 숫자로 구성된 식별값을 생성한다.
별도의 파라미터는 없으며 다음과 같이 사용된다.
|
native 생성기
native 생성기는 DBMS가 제공하는 기능에 따라 identity, sequence, hilo 생성기를 선택적으로 사용한다.
assigned 생성기
assigned 생성기는 어플리케이션에서 직접 식별값을 입력한다는 것을 의미한다. assigned 생성기를 사용하면 객체를 저장하기 전에(즉, Session.save() 메소드를 호출하기 전에) 식별자에 키값을 입력해주어야 한다.
http://blog.naver.com/vurnboy?Redirect=Log&logNo=50022867936 ----> 퍼온곳
'Java > 하이버네이트' 카테고리의 다른 글
List of Hibernate SQL Dialects (0) | 2010.11.18 |
---|