JPA 어노테이션 정리
JPA 어노테이션 정리
@Entity
이 어노테이션은 해당 클래스가 엔티티임을 알리기 위해 사용합니다. 애플리케이션이 실행이 될 때 엔티티 자동검색을 통하여 이 어노테이션이 선언 된 클래스들은 엔티티 빈으로 등록합니다.
엔티티 빈이란?
데이터를 객체화하여 재사용이 가능한 컴포넌트를 말한다.
데이터를 객체화한다는 것은 개발자들이 데이터에 접근하고 변경하는 방법이 보다 단순하고 쉬워진다는 것을 의미한다. 객체화 된 데이터를 비즈니스 객체 또는 현실 세계의 객체 라고 하며 이 객체는 영속성을 가진 관계형 데이터베이스에 저장이 되며 데이터베이스에서 테이블의 한 레코드와 대응된다. 여기서 중요한것은 빈 인스턴스와 데이터베이스의 데이터가 동기화되어야 한다는 것이다. 즉 빈 인스턴스에서 새로운 변화가 일어날 때마다 데이터베이스도 같이 갱신이 되어야하는 것이다.
출처: http://finerss.tistory.com/entry/엔티티-빈 [finerss's world!]
2. @Table
데이터의 저장소, 테이블을 의미합니다. name 값은 실제 데이터베이스의 테이블명을 의미하며, 이 어노테이션은 생략이 가능합니다. 어노테이션을 생략하면 클래스의 이름을 테이블의 이름으로 자동 인식하게 됩니다.
3. @Id
엔티티빈의 기본키를 의미합니다. 이 어노테이션은 하나의 엔티티에는 반드시 하나가 존재해야 합니다. 복수키도 설정할 수 있습니다만, 해당 내용은 후에 다루도록 하겠습니다.
4. @GeneratedValue
데이터베이스에 의해 자동으로 생성된 값이라는 의미입니다. 즉, 프로그램 상에서 조작된 데이터가 아닌, 실제 데이터베이스에 데이터가 영속(저장)될 때 생성되는 값입니다. 몇가지 생성전략이 존재합니다. 역시 해당 내용은 후에 다루도록 하겠습니다.
http://jo.centis1504.net/?p=368 - SequenceGenerator 과 GeneratedValue 로 시퀀스 생성하는 과정
5. @Column
필드와 테이블의 컬럼을 매핑시켜줍니다. 이 어노테이션은 생략이 가능하며, 생략시 필드의 이름이 테이블의 컬럼으로 자동으로 매핑이됩니다.
5-1. name속성(String)
필드와 매핑 될 컬럼의 이름을 명시합니다.
5-2. nullable속성(boolean)
해당 컬럼이 null값을 허용하는가 하지않는가의 여부입니다.
5-3. length속성(int)
컬럼의 길이값을 의미합니다.
5-4. unique속성(boolean)
컬럼이 유일한 값을 가져야 하는가 아닌가의 여부입니다.
5-5. insertable속성(boolean)
엔티티가 영속될 때 insert에 참여할지 말지를 결정합니다. 기본값은 true
5-6. updatable속성(boolean)
변경된 필드의 값을 테이블에도 반영할지를 결정합니다. 기본값은 true
name속성을 제외한 나머지 속성은 잘 사용되지 않을것 이라고 생각됩니다. nullable, length, unique는 DDL과 관련된 속성이고, insertable, updatable은 원래 잘 사용되지 않는 속성이기 때문입니다.
출처: http://chan180.tistory.com/168 [시대유감]
6. @Temporal - 날짜!
@Temporal(TemporalType.TIMESTAMP)
protected Date regdate;
spring.jpa.hibernate.ddl-auto에 대해 간략히 옵션값을 확인해보도록 하자
create : 기존테이블 삭제 후 다시 생성
create-drop: create와 같으나 종료시점에 테이블 DROP
update: 변경분만 반영
validate: 엔티티와 테이블이 정상 매핑되었는지만 확인
none: 사용하지 않음
출처: http://cpdev.tistory.com/25 [하루하나]