본문 바로가기
프로그래밍/JPA

JPA Mapping

by 기프티콘주세요 2021. 8. 26.

JPA Entity Mapping

@Entity

"엔티티"는 객체에서 부르는 이름으로, 보통 class와 같은 이름을 사용하기 때문에 값을 변경하지 않는다.

엔티티의 이름은 JQL에서 사용한다.

@Entity(name="변경할 엔티티명")을 통해서 엔티티명을 지정할 수 있다.

 

@Table

"릴레이션"에서 부르는 이름으로, @Entity의 이름이 기본값이며, SQL에서 사용한다.

@Table(name="DB Table명")을 통해서 Table과 맵핑할 수 있다.

 

@Id

  • 엔티티의 주키(PK) 를 맵핑할 사용한다.
  • Java의 모든 primitive 타입과 그 래퍼런스 타입을 사용할 수 있다.
  • 복합키를 만드는 맵핑하는 방법도 있다. (@IdClass annotation 사용)

@GeneratedValue

  • 주키의 생성 방법을 맵핑하는 annotation
  • 생성전략과 생성기를 생성할 수 있다.
    • 기본전략의 AUTO : 사용하는 DB에 따라 다르다.
    • TABLE, SEQUENCE, IDENTITY중 하나

@Column

  • unique : 유니크 값 여부 ( true | false )
  • nullable : null값 허용 여부 ( true | false )
  • length : 컬럼의 사이즈 설정 ( default : 255)
  • columnDefinition : 컬럼의 타입와 기본값을 지정할 수 있다.
    • @Column(columnDefinition = " varchar(500) default 'hello'")

@Temporal

  • 날짜형 데이터를 맵핑하는 annotation
  • 종류 : DATE / TIME / TIMESTAMP

@Transient

  • DataBase Table의 컬럼과 맵핑하고 싶지 않을 경우에 사용한다.

Value Mapping

Value 타입의 종류

  • default Type ( String, Date, Boolean ... )
  • Composite Value Type
  • Collection Value Type

Composite Value 타입 맵핑

Address의 street column을 home_street column으로 맵핑하여 사용하면, DDL 실행 시, home_street으로 테이블이 생성되는 것을 확인할 수 있다.

 

다:1 양방향 Mapping ( 1:N, N:1 )

양방향은 외래 키가 있는 쪽인 연관관계의 주인이다.

1:N 과 N:1 항상 N쪽에 외래 키가 있다.

JPA는 외래 키를 관리할 때, 연관관계의 주인만 사용한다.

주인이 아닌 경우에는 조회를 위한 JPQL이나 객체 그래프를 탐색할 때 사용한다. 

 

양방향 연관관계는 항상 서로를 참조해야 한다.

양방향 연관관계는 항상 서로를 참조해야 하며, 어느 한쪽만 참조할 경우 양방향 연관관계가 성립되지 않는다. 

 

API호출에 대한 데이터의 결과가 아래와 같다고 할 경우, Entity의 연관관계 설정은 그림과 같다.

위 entity들을 확인해보면, TestEntity.master가 연관관계의 주인이다.

 

Controller
result.get().taskCode 의 console 결과
for문의 data.areaCode console 결과