본문 바로가기

IT/JPA

JPA Entity 애노테이션 알아보기

JPA Entity 애노테이션 알아보기

지난 시간에 상품을 주문하고 결제하는 데 필요한 대략적인 Entity를 만들어 보았다
오늘은 Entity에 사용된 애노테이션에 대해 알아보고자 한다

@Entity

- Jpa Entity를 만들기 위해 사용되며 데이터베이스 테이블과 1:1로 매칭되는 객체단위이다
- 테이블에서 하나의 레코드 값을 의미한다.

@Id, @GeneratedValue

- @Id는 테이블에서 Primary key와 같은 개념이며 객체의 유일한 키값을 의미한다.
= @GeneratedValue는 유일한 키값에 대한 전략이다.

@JsonIgnore

 - 직렬화 역직렬화에 사용되는 논리적 프로퍼티(속성..) 값을 무시할때 사용됩니다.
 @JsonIgnore
 var password: String,
 
 위의 경우 직렬화 할때 Json데이터에 password 필드는 무시된다.

@JvmSuppressWildcards

코틀린 컴파일러는 제네릭을 기본적으로  List<String>을 List<? extends String> 형태로 변환한다
​
이런형태의 자동변환을 방지하는 방법은 @JvmSuppressWildcards 입니다
​
@JvmSuppressWildcard 애노테이션을 붙이지 않으면, 사용할때 따로 형 지정이 필요하다 
@JvmSuppressWildcard 애노테이션을 사용하면, 따로 형지정 없이 매개변수를 바로 사용할 수 있다.

@BatchSize

하이버네이트가 제공하는 org.hibernate.annotations.BatchSize 어노테이션을 이용하면 연관된 엔티티를 조회할 때 지정된 size 만큼 SQL의 IN절을 사용해서 조회한다.
​
BatchSize size 설정해 놓으면 관련 객체가 있을 경우 sql 쿼리의 where 조건이 in (, , ,)이 추가된다.
size 100으로 잡을 경우 하이버네이트 캐싱에 의해 앞에 자주 사용될 10개는 가져오고 100의 절반의 값으로 캐싱이 이뤄진다.
이러한 기능으로 JPA의 N+1문제를 해결할 수 있다.
​

@OneToMany, mappedBy

- JPA 연관관계에 관련되는 부분인데 양방향 연관관계에서 ManyToOne에 지연로딩 전략을 설정
  (데이터베이스 테이블은 보통 다쪽에 외래키를 설정)하고 JoinColumn으로 연결
  
- OneToMany쪽에 mappedBy로 읽기전용으로 데이터를 가져오가 설정한다.

@Enumerated

- Enum값을 사용할때 사용한다,
- Ordinal, String이 있지만 전에 들었던 강의에서 일반적으로 String을 사용한다고 했다.
  그 이유는 숫자로 사용할때는 중간 삽입시 혼돈의 문제가 발생할 여지가 있기 때문이다.
​
정리 : 이번 시간에는 저번 시간에 작성한 Entity에 사용된 JPA 애노테이션에 대해 알아보았다.
이외에도 다양한 애노테이션이 있는데 다음에 자세히 알아볼 시간을 갖도록 하겠다.