▶ Spring

JPA 어노테이션 정리

SieunLim 2018. 4. 15. 14:43
728x90

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;

TemporalType.Date : 년-월-일 의 date 타입

TemporalType.Time : 시:분:초 의  time 타입

TemporalType.TIMESTAMP : date + time 의 timestamp(datetime) 타입

애노테이션을 사용하지 않을 경우 기본값은 timestamp 입니다.

JPA 데이터베이스 방언에 의해, 데이터베이스의 타입에 따른 timestamp 또는 datetime은 자동으로 작성됩니다.

출처: http://devofhwb.tistory.com/93 [이든의 생활코딩]


사용시

spring.jpa.hibernate.ddl-auto에 대해 간략히 옵션값을 확인해보도록 하자

create  : 기존테이블 삭제 후 다시 생성

create-drop: create와 같으나 종료시점에 테이블 DROP

update: 변경분만 반영

validate: 엔티티와 테이블이 정상 매핑되었는지만 확인

none: 사용하지 않음



출처: http://cpdev.tistory.com/25 [하루하나]


반응형