JPA- Entity 객체와 Table 맵핑.
어노테이션 설명
@Entity
- DB Table과 맵핑할 Entity 객체라는 선언이다.
- default생성자가 필수 이며, final클래스, enum, interface, inner클래스에서는 사용할 수 없다.
@Table
- Table 어노테이션의 name속성에 실제로 매핑시킬 DB Table명을 명시해준다.
생략시 JPA가 알아서 class의 이름과 매핑되는 Table명을 찾아 매핑시킨다.
@Id
- Table에서 기본키(PK)로 사용되는 컬럼에 @Id 어노테이션으로 식별자라는것을 선언한다.
@Id 어노테이션은 필수 이며, 복합키를 가진 테이블의 경우 별도의 클래스를 만든 후
@Id어노테이션 대신 @EmbeddedId 어노테이션을 사용해서 명시해야 한다.
@Column
Entity의 속성과 매핑시킬 컬럼의 컬럼명을name속성을 이용해 명시해준다. 생략 가능하다.
복합키를 가진 Entity 생성하는 방법.
BOOK테이블은 PK가 복합키(book_code, book_name)로 구성되어 있다 .
따라서 별도의 bookId 클래스를 생성하고.
Book Entity에선 @EmbeddedId 어노테이션을 이용하여 키를 명시해 주고 있다.
복합키용 클래스 생성시에는 상단에 @Embeddeable 어노테이션을 추가해줘야 한다.
추가로 복합키는 equals()와 hashCode() 메서드를 추가로 필수 구현해주어야 한다. (아래 이미지 참조)
이유는 영속성 켄텍스트에서 식별자를 키로 이용해 관리하며, 식별자를 비교할때 사용되는 메서드가 equlas와 hashCode이기 때문이다.
*영속성 컨텍스트란
Entity를 영구 저장하는 환경으로 entityManager를 이용해서 Entity를 저장하거나 조회하면 EntityManager는 영속성 컨텍스트에 Entity를 저장한다.
*참고문헌 : 자바 ORM표준 JPA 프로그래밍
'JPA' 카테고리의 다른 글
JPA 와 ORM에 대해. (0) | 2020.04.12 |
---|