Junjangsee's Blog

JPA - Entity Mapping(엔티티 매핑)

2019-05-21

images

엔티티 매핑

엔티티를 매핑하는 방법에는 XML, 어노테이션 총 2가지의 방식이 있지만 보통 어노테이션 방식으로 사용하게 됩니다.
어노테이션을 활용하여 매핑하는 법에 대해 알아보겠습니다.

여기서 실습하는 코드는 이전에 학습했던 프로젝트세팅에 설명되어 있습니다


@Entity

엔티티 클래스를 빈으로 등록하여 JPA와 연동할 수 있도록 해줍니다. 기본적으로 @Table을 포함하고 있습니다.

1
@Entity(name = "users")

도메인 클래스명을 다른 클래스명으로 정의하고 테이블을 만들려고 할 때 name을 선언합니다.

Entity 도메인명은 User지만 users로 테이블이 생성된 모습입니다.


@Id, @GeneratedValue

  • @Id : 엔티티와 주키를 매핑할 때 사용합니다.
  • 자바의 모든 primitive 타입과 타입에 대한 wrapper 클래스를 사용할 수 있습니다.
  • @GeneratedValue : 주키의 생성 방법을 매핑할 때 사용합니다.
  • 보통은 AUTO(기본값)를 사용합니다.

Entity

@Column

컬럼에 대한 설정 값을 매핑할 때 사용합니다.

  • unique : unique 사용여부를 결정합니다.
  • nullable : null 사용여부를 결정합니다.
  • columnDefinition : 반드시 SQL문을 작성해야할 때 사용합니다.

Entity username은 null이면 안되고 unique해야한다는 매핑을 한 예시입니다.


@Temporal

날짜를 매핑할 때 사용합니다.

  • Java의 Date에 관련된 값을 타입에 맞게 변환해줍니다.


@Transient

도메인에는 선언하였지만 컬럼으로는 매핑되지 않도록 합니다.



엔티티 클래스

지금까지 학습한 어노테이션을 적용한 엔티티 클래스를 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import javax.persistence.*;
import java.util.Date;

@Entity
public class Account {

@Id
@GeneratedValue
private Long id;

@Column(nullable = false, unique = true)
private String username;

private String password;

@Temporal(TemporalType.TIMESTAMP)
private Date created = new Date();

private String yes;

@Transient
private String no;

}

Entity 위 모든 어노테이션을 활용해 보았을때의 클래스 모습입니다.
결과를 보면 TIMESTAMP형식으로 날짜가 들어간 것을 확인할 수 있고 no 변수는 @Transient로 인해 컬럼에 매핑되지 않은 것을 볼 수 있습니다.


SQL을 확인하고 싶다면?

JPA에서 자동으로 생성해서 처리한 SQL을 Console에서 볼 수 있는데 application.properries에서 쉽게 설정이 가능합니다.

1
spring.jpa.show-sql=true

위 설정은 SQL이 실행되는 경과를 출력하는 역할을 해줍니다.

1
spring.jpa.properties.hibernate.format_sql=true

위 설정은 위에서 보여주는 SQL을 가독성 높게 출력해줍니다.
그래서 두 설정을 한 후 출력하게 되면..

Entity 위처럼 보기 쉽게 SQL문을 확인할 수 있습니다.