아래와 같은 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
https://ict-nroo.tistory.com/128
'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 |