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]
'Java 관련 > JPA' 카테고리의 다른 글
QueryDsl 환경설정 (0) | 2021.11.17 |
---|---|
JPA - 스프링 데이터 JPA (0) | 2021.11.17 |
JPA - 하이버네이트와 스프링 연동 (0) | 2021.11.17 |
JPA - JPQL과 Criteria 쿼리 (0) | 2021.11.17 |
JPA - 엔티티 매니저와 트랜잭션 (0) | 2021.11.17 |
JPA에 기반한 비즈니스로직 중심의 S/W 개발 (0) | 2021.11.17 |
JPA 요소 (0) | 2021.10.05 |
[JPA] Entity 객체 생명주기(Lifecycle)와 Persistence Context (0) | 2020.09.07 |