JPA 매핑에 사용되는 어노테이션은 크게 유형에 따라 4가지로 나누어진다.
유형 | 어노테이션 |
객체와 테이블 매핑 | @Entity, @Table |
기본 키 매핑 | @Id |
필드와 컬럼 매핑 | @Column |
연관관계 매핑 | @ManyToOne, @JoinColumn |
@Entity
JPA를 사용해서 테이블과 매핑할 클래스에는 무조건 붙혀야하는 어노테이션이다. 속성으로 name을 지정할 수 있다. 안할 시 기본 클래스 이름으로 한다.
1 | @Entity(name = "Member") | cs |
- 기본 생성자가 필수로 있어야 한다.
- final 클래스와 private 생성자는 할 수 없다.
@Table
엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑하는 엔티티이름으로 대신한다.
-name, catalog, schema, uniqueConstraints(DDL 선언시 유니크 제약조건) 등을 같이 설정하여 만들 수 있다.
이렇게 설정된 클래스를 가지고 자동으로 테이블을 생성할 수 있다.
1 | spring.jpa.hibernate.ddl-auto=update | cs |
설정하는 값에 따라서 테이블 생성이 달라지는데 create는 기존 테이블을 삭제하고 새로 생성하고, create-drop는 애플리케이션이 종료될때 제거되고 update는 변경된 사항만 수정하고 validate는 매핑정보가 달라졌을때 경고를 주면서 애플리케이션 실행을 하지 않고 none는 아무런 동작을 하지 않는다.
DDL 생성 시 설정
@Colummn 매핑에는 nullable 속성과 length등의 속성을 지정할 수 있다
1 2 3 4 | @Column(name = "NAME", length = 10, nullable = false) private String userName; // NAME varchar(10) not null 과 매핑 | cs |
@Table 어노테이션은 UniqueConstraint를 지정할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | /** * springboottest * * @author wedul * @since 03/10/2018 **/ @Entity(name = "Member") @Data @Table(name = "MEMBER", uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"} )}) public class Member { @Id @Column(name = "ID") private String id; @Column(name = "NAME", length = 10, nullable = true) private String userName; // 매핑 정보가 없는 필드 private int age; } // ALTER TABLE MEMBER ADD CONSTRAINT NAME_AGE_UNIQUE UNIQUE(NAME, AGE); 로 매핑 | cs |
기본키는 @Id를 사용하여 지정할 수 있고 AUTO_INCREMENT와 같은 기능을 @GeneratedValue를 사용하여 지정할 수 있다.
1 2 3 | @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long orderId; | cs |
추가적인 속성으로 IDENTITY(기본키 생성을 데이터베이스가 함), SEQUENCE(데이터베이스 시퀀스를 사용해서 기본 키 할당), TABLE (키 생성 테이블 생성)이 있다. 각 속성이 모든 데이터베이스 업체에 적용되는건 아니고 적용되는 벤더만 사용된다. 만약 이 모든 설정을 하는게 번거롭다면 그냥 @GeneratedValue 어노테이션만 사용하면 된다. 왜냐하면 기본 설정이 GenerationType.AUTO인데 이는 벤더에 맞게 전략이 선택되어 사용된다.
레퍼런스 : 자바 ORM 표준 JPA 프로그래밍
'web > JPA' 카테고리의 다른 글
연관관계 매핑 - 다대일 매핑 (단반향) (0) | 2018.10.23 |
---|---|
JPA 매핑 어노테이션 - DDL 2 (0) | 2018.10.13 |
JPA 영속성 컨테이너에서 엔티티 사용하기 (0) | 2018.10.11 |
JPA persistence 설정 및 Entity manager 설명 (0) | 2018.10.10 |
JPA 기본 어노테이션 설명 (0) | 2018.10.06 |