JPA - 엔티티 매핑

2021. 11. 17. 16:18 Java 관련/JPA

 

 

엔티티 매핑

엔티티 맵핑은 JPA에서 제공하는 다양한 맵핑 애노테이션을 이용합니다. 대표적인 애노테이션을 살펴보면 다음과 같습니다.

 

테이블 맵핑

애플리케이션이 시작 되면 테이블 매핑 애노테이션이 있는 모든 클래스를 대상으로 적합성을 검사합니다.

@Entity
@Table(name="MEMBER")
public class Product{
  ...
}

테이블 맵핑은 누락 되지 않도록 합니다. 누락 되면 엔티티를 식별할 수 없어 세션 팩토리를 생성할 수 없다는 에러가 발생합니다.

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: jpabook] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120)

기본키 맵핑

@Id
@Column(name = "ID")
private String id;

 

날짜 맵핑

@Temporal(TemporalType.TIMESTAMP)
private Date registerDate;

 

테이블 맵핑

다 대 일 관계로 맵핑할 때 사용하는 애노테이션 입니다.

@ManyToOne
@JoinColumn(name="PRODUCT_ID")
private Product product;    

 

자동 키 생성

자동 키 생성은 Mysql인 경우 AUTO_INCREMENT 설정된 칼럼을 의미합니다. 다음 세개의 애노테이션은 동일한 기능을 합니다.

 

@Id @GeneratedValue(strategy=GenerationType.IDENTITY)private Long id;

 

만약 프라이머리키가 자동 생성 값을 갖는다면 다음과 같은 애노테이션을 정의합니다.

@Id 
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "tbl_n") 
private Integer tbl_n;  

 

DDL 생성

엔티티 매핑 작업이 이뤄졌으면 테이블 생성을 위한 DDL을 얻을 수 있습니다. persistence.xml파일에 다음 속성을 추가합니다.

<property name="hibernate.hbm2ddl.auto" value="create" />

이때 다음과 같은 속성을 추가하면 애플리케이션 시작 시점에 sql을 콘솔 창에 출력합니다.

<property name="hibernate.show_sql" value="true" />

유의할 점은 동일한 이름의 테이블이 기존에 존재하면 생성하지 않고, 테이블 정보가 없을 경우에만 생성합니다. 이때 value 값에 설정할 수 있는 속성 값별 의미는 다음과 같습니다.

  • create : 스키마를 생성합니다. 클래스패스에 import.sql 이 존재하면 찾아서, 해당 SQL도 함께 실행합니다.
  • create-drop : create 하지만 session factory가 내려갈 때 스키마를 삭제합니다.
  • update : 시작시, 도메인과 스키마 비교 작업 후 스키마를 업데이트함. 데이터는 삭제하지 않습니다.
  • validate : Session factory 실행시 스키마가 적합한지 검사하며 문제가 있으면 예외를 발생합니다.



출처: https://happygrammer.tistory.com/148?category=891896 [happygrammer]