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

+ Recent posts