Time does not change us. It just unfolds us.

Web/JPA

[JPA]Annotation 정리

소젬 2021. 11. 18. 16:59

아래와 같은 table을 작성하기 위해 entity 개발을 하면 사용된 annotation을 정리하고자 한다.

  • @Entity

데이터베이스 테이블과 일대일로 매칭되는 객체 단위로, Entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미한다. 

객체의

 인스턴스를 구분하기 위한 유일한 키값을 가지는데 테이블 상의 Primary Key와 같은 의미이다.

 

  • @Id

Entity 클래스 상에 해당 PK를 명시적으로 지정한다.

 

  • @Column

데이터베이스의 테이블에 잇는 컬럼과 동일하게 1:1로 매칭되기 때문에 Entity 클래스 안에 내부변수로 정의된다.

별다른 옵션을 설정하지 않는다면 생략이 가능하다. 즉 Entity 클래스에 정의된 모든 내부변수는 기본적으로 @Column 어노테이션을 포함한다고 본다.

 

  • @GeneratedValue

PK column의 데이터는 구분이 가능한 유일한 값이어야 하고 데이터 경합으로 인해 발생되는 데드락 같은 현상을 방지해야 한다.

 

  • @OneToMany/OneToOne/ManyToMany/ManyToOne

OneToMany ,ManyToOne : 해당 테이블을 기준으로 1:N관계 Join하므로 값을 List로 갖게 된다.

연관관계를 구현한다.

 

  • @JoinColumn

join할 column 지정한다. 외래 키를 매핑한다.

name 매핑할 외래 키의 이름을 지정할 때 사용한다
기본 값 : 참조하는 테이블의 컬럼명
referenceColumnName 외래 키가 참조하는 자신의 테이블의 컬럼명을 의미한다
기본 값: 해당 맴버 변수의 이름.

 

  • @Embedded/@Embeddable

속성들에 관하아 추상화시키고 싶고 새로운 테이블로 정의하고 싶지 않을 때 사용한다.

 

  • @Enumerated

enum 형태로 되어 있는 미리 정의되어 있는 코드 값이나 구분값을 데이터 타입으로 사용하고자 할 때 사용한다.

ORDINAL은 enum 객체에 정의된 순서가 컬럼의 값으로 사용되고, STRING은 enum의 문자열 자체가 컬럼의 값으로 사용된다.

 

  • @Transient

Enity 객체에 속성으로서 지정이 되어 있지만 데이터베이스 상에 필요없는 속성이라면 해당 속성을 데이터베이스에서 사용하지 않도록 정의한다. 즉 속성을 Entity 객체에 임시로 값을 담는 용도로 사용이 가능하다.

 

Self 연관관계

@ManyToOne
@JoinColumn(name = "parent_id")
private Category parent;

@OneToMany(mappedBy = "parent")
private List<Category> child = new ArrayList<>();

 

상속관계

  • @Inheritance

default 전략은 SINGLE_TABLE(단일 테이블 전략)이다. InheritanceType 종류는 아래와 같다.

  • JOINED
  • SINGLE_TABLE
  • TABLE_PER_CLASS

 

  • @DiscriminatorColumn(name="DTYPE")

부모 클래스에 선언한다. 하위 클래스를 구분하는 용도의 컬럼이다. 관례는 default = DTYPE이다.

 

  •  @DiscriminatorValue 

클래스의 상속관계를 JPA로 표현하기위해서 @DiscriminatorColumn 애노테이션으로 부모 클래스의 구분 컬럼을 지정하고 @DiscriminatorValue 애노테이션으로 자식 클래스가 사용할 구분자 값을 지정한다.

@DiscriminatorValue는 String 타입을 Value 로 지정하게 되어있다.

 

 

 

참고

https://www.icatpark.com/entry/JPA-%EA%B8%B0%EB%B3%B8-Annotation-%EC%A0%95%EB%A6%AC

 

JPA 기본 Annotation 정리

@Entity @Entity 어노테이션은 데이타베이스의 테이블과 일대일로 매칭되는 객체 단위이며 Entity 객체의 인스턴스 하나가 테이블에서 하나의 레코드 값을 의미합니다. 그래서 객체의 인스턴스를

www.icatpark.com

https://velog.io/@geunwoobaek/Spring-JPA-%EA%B4%80%EB%A0%A8-%EC%A3%BC%EC%9A%94-Annotation%EC%A0%95%EB%A6%AC

 

Spring JPA 관련 주요 Annotation 및 설정

1.개요 javax.persistence 패키지 않의 수많은 어노테이션 인터페이스들이 존재한다. 이중에서 가장 많이쓰는 몇가지 어노테이션에 대해서 정리하였다. 2.정리 엔티티 관련 2.1.1) @Entity: 해당 어노테이

velog.io

https://ict-nroo.tistory.com/128

 

[JPA] 상속관계 매핑 전략(@Inheritance, @DiscriminatorColumn)

상속관계 매핑 객체는 상속관계가 존재하지만, 관계형 데이터베이스는 상속 관계가 없다.(대부분) 그나마 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑이라

ict-nroo.tistory.com

 

'Web > JPA' 카테고리의 다른 글

[JPA]객체지향 쿼리  (0) 2021.11.25
[JPA]Transcation, 영속성Context, EntityManager  (0) 2021.11.23
[JPA]JUnit단위 Test 관련 정리  (0) 2021.11.23
[JPA]JPQL(Java Persistence Query Language)  (0) 2021.11.22