일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 |
- 프로그래머스
- JPA
- 알고리즘
- 이펙티브자바
- Jetson
- Python
- DeepLearning
- 포인트클라우드
- Database
- 아두이노
- 배달로봇
- 딥러닝
- 운영체제
- Hibernate
- Java
- 자바
- MySQL
- 논문리뷰
- 자율주행
- 장애물인식
- 파이썬
- cartograhper
- 디자인패턴
- 자료구조
- 네트워크
- 영속성컨텍스트
- Spring Batch
- 논문
- persistance context
- 자바ORM표준JPA프로그래밍
- Today
- Total
제리 devlog
[JPA] 앤티티 매핑 본문
객체와 테이블 매핑 : @Entity, @Table
기본 키 매핑 : @Id
필드와 컬럼 매핑 : @Column
연관 관계 매핑 : @ManyToOne, @JoinColumn
@Entity
테이블과 매핑할 클래스에 붙인다. @Entity가 붙은 클래스는 JPA가 관리하며 엔티티라 부른다.
@Entity(name = "")속성을 사용하여 엔티티의 이름을 지정할 수 있다. 기본 값은 클래스 이름이다.
@Entity를 적용 시 주의사항은 아래와 같다.
* 기본 생성자는 필수(파라미터가 없는 public, protected생성자)
* final 클래스, enum, interface, inner클래스는 사용불가
* 저장할 필드에 final을 사용하면 안 된다.
@Table
엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 지정함.
name : 매핑할 테이블 이름 (기본 값으로 엔티티 이름을 사용)
catalog : catalog 기능이 있는 데이터베이스에서 catalog를 매핑
schema : schema 기능이 있는 데이터베이스에서 schema를 매핑
다양한 매핑
@Entity
@Table(name="MEMBER")
public class Member {
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String name;
private Integer age;
@Enumerated(EnumType.String)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
...
}
public enum RoloType {
ADMIN, USER
}
1. roleType: enum을 사용하고 싶다면 @Enumerated어노테이션으로 매핑한다.
2. createdDate, lastModifiedDate : 자바의 날짜 타입은 @Temporal을 사용해서 매핑한다.
3. description : 필드의 길이제한이 없이 만들고 싶다면 @Lob을 사용한다. CLOB, BLOB타입으로 매핑됨.
데이터 베이스 스키마 자동 생성 옵션
create : 기존 테이블을 삭제하고 새로 생성 drop + create
create-drop : create 속성에 추가로 drop한다. 애플리케이션이 종료될 때 DDL을 제거함
update : 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경 사항만 수정
vaildate : 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있으면 경고를 남기고 애플리케이션을 실행하지 않는다. 이 설정은 DDL을 수정하지 않음
none : 자동 생성 기능을 사용하지 않으면 유효하지 않은 값을 주면 됨 (none은 유효하지 않은 옵션 값)
운영 서버에서 create, create-drop, update같은 DDL옵션을 주는 것을 주의하자.
개발 초기 - create, update
초기화 상태로 자동화된 테스트를 진행하는 개발자 환경, CI 서버 - create, create-drop
테스트 서버 - update, vaildate
운영 서버 - vaildate, none
DDL 생성 기능
컬럼에 추가적인 옵션을 부여할 수 있음
@Column(nullable = false, length = 10)
private username
nullable : null의 여부 기본 값은 true이다. 만약 객체 타입이 아닌 자바 기본 타입에서 컬럼어노테이션 없다면 nullable=false로 생성된다.
length : 문자의 크기를 지정
테이블의 제약 조건
@Tabel(name = "MEMBER", uniqueConstraints = {@UniqueConstraint(
name = "NAME_AGE_UNIQUE"m
columnNames = {"NAME", "AGE"})})
uniqueConstraints로 유니크 제약조건을 지정할 수 있다.
DDL은 테이블을 생성할 때 영향을 주고 JPA실행 로직에는 영향이 없다.
기본 키 매핑
기본 키 생성 전략은 직접 할당과 자동생성 방식이 있다. 자동 생성 방식은 벤더마다 지원하는 방식이 달라 여러가지가 있음. 자동 생성 전략은 @Id아래 @GeneratedValue어노테이션을 추가하고 원하는 전략을 선택하면 됨.
자동 생성
- IDENTITY : 기본 키 생성을 데이터베이스에 위임
-SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다.
-TABLE : 키 생성 테이블을 사용한다.
@Transient
이 필드는 매핑하지 않는다. 데이터베이스에서 저장, 조회를 하지 않는다. 객체에 임시로 어떤 값을 보관하고 싶을 때 사용한다.
'JPA' 카테고리의 다른 글
[JPA] 양방향 연관관계 (0) | 2020.11.21 |
---|---|
[JPA] 단방향 연관관계 (0) | 2020.11.20 |
[JPA] 영속성 관리 (0) | 2020.11.15 |
[JPA] Hibernate 실행해보기 (0) | 2020.11.11 |
[JPA] 왜 JPA를 사용해야하는 가? (1) | 2020.11.10 |