@Id는 해당 프로퍼티가 테이블의 주키(primary key) 역할을 한다는 것을 나타낸다. 속성에 직접 @Id를 붙여주면 실행 시점에 객체의 필드를 통해 직접 접근하게 하는 것이며, getter를 이용하려면 getter에 @Id를 붙여준다. 속성에 부여하게 되면 setter/getter 없이도 작업이 가능하다. setter에 @Id를 붙이면 예외가 발생한다.
@GeneratedValue는 주키의 값을 위한 자동 생성 전략을 명시하는데 사용한다. 선택적 속성으로 generator와 strategy가 있다. strategy는 persistence provider가 엔티티의 주키를 생성할 때 사용해야 하는 주키생성 전략을 의미한다. 디폴트 값은 AUTO이다. generator는
주키 생성 전략으로 JPA가 지원하는 것은 아래의 네 가지이다.
1. AUTO : (persistence provider가) 특정 DB에 맞게 자동 선택
2. IDENTITY : DB의 identity 컬럼을 이용
3. SEQUENCE : DB의 시퀀스 컬럼을 이용
4. TABLE : 유일성이 보장된 데이터베이스 테이블을 이용
postgres를 이용하여 테스트해보면 AUTO와 SEQUENCE는 실제 INSERT 쿼리가 일어나기 전에 다음 쿼리를 통해서 주키를 가져오는 것을 확인할 수 있다.
IDENTITY는 예외가 발생하고, TABLE의 경우 내부적으로 사용하는 것으로 추정할 수 있는 알 수 없는 값으로 id가 부여된다. AUTO 이외의 생성 전략을 사용할 경우 대상 DB에 대한 지식이 요구됨을 알 수 있다. 위의 네 가지 생성전략에 대한 hibernate의 내장 Generator 이름은 다음과 같다.
1. native : AUTO
2. identity : IDENTITY
3. sequence : SEQUENCE
4. TABLE에 대응하는 내장 Generator는 없음
이외에도 hibernate는 몇가지 생성 전략이 더 지원한다.
참고:
- JEE API: Id, GeneratedValue, GenerationType
- Java Persistence with Hibernate 167쪽
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer gettId() {
return id;
}
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer gettId() {
return id;
}
@GeneratedValue는 주키의 값을 위한 자동 생성 전략을 명시하는데 사용한다. 선택적 속성으로 generator와 strategy가 있다. strategy는 persistence provider가 엔티티의 주키를 생성할 때 사용해야 하는 주키생성 전략을 의미한다. 디폴트 값은 AUTO이다. generator는
SequenceGenerator나 TableGenerator 애노테이션에서 명시된 주키 생성자를 재사용할 때 쓰인다. 디폴트 값은 공백문자("")이다. 주키 생성 전략으로 JPA가 지원하는 것은 아래의 네 가지이다.
1. AUTO : (persistence provider가) 특정 DB에 맞게 자동 선택
2. IDENTITY : DB의 identity 컬럼을 이용
3. SEQUENCE : DB의 시퀀스 컬럼을 이용
4. TABLE : 유일성이 보장된 데이터베이스 테이블을 이용
postgres를 이용하여 테스트해보면 AUTO와 SEQUENCE는 실제 INSERT 쿼리가 일어나기 전에 다음 쿼리를 통해서 주키를 가져오는 것을 확인할 수 있다.
select nextval ('hibernate_sequence')
IDENTITY는 예외가 발생하고, TABLE의 경우 내부적으로 사용하는 것으로 추정할 수 있는 알 수 없는 값으로 id가 부여된다. AUTO 이외의 생성 전략을 사용할 경우 대상 DB에 대한 지식이 요구됨을 알 수 있다. 위의 네 가지 생성전략에 대한 hibernate의 내장 Generator 이름은 다음과 같다.
1. native : AUTO
2. identity : IDENTITY
3. sequence : SEQUENCE
4. TABLE에 대응하는 내장 Generator는 없음
이외에도 hibernate는 몇가지 생성 전략이 더 지원한다.
참고:
- JEE API: Id, GeneratedValue, GenerationType
- Java Persistence with Hibernate 167쪽
