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

- ORM(Object Relational Mapping) - 객체 관계 매핑

 

ORM은 RDB의 Table 과 자바 객체를 매핑시켜 좀 더 객체지향적인 개발을 가능하게 해주는 기술이다. 

 

- ORM Framework

DB Table과 자바 객체를 맵핑시켜 CRUD에 필요한 SQL을 자동으로 생성시켜주는 기술을 가진 프레임웤을 말한다.

그 중 하나가 JPA이다. 

 

- JPA (Java Persistence API)

JPA는 자바진영에서 사용하는 ORM 표준 기술이며, Hibernate 기반이다.

(* Hibernate 가장 많이 사용되고 있고, 가장 오래된 ORM기술).

 

Table과 자바 객체를 맵핑시켜서 SQL을 자동생성 시켜준다 ?

그렇다..

현재 본인도 myBatis를 이용한 프레임웤 환경에서 DAO(Data Access Object)를 이용해 쿼리들이 잔뜩 들어있는 .xml 매퍼에서 데이터를 조회해오고, 결과를 저장하고 있는데,,

이러한 방식은 객체지향적이라기 보다는 데이터 베이스관점으로 치우처진 개발이다.

 

물론 myBatis 방식이, SQL에 집중할 수 있는다는 장점을 가지고 있으나,

비슷하고 반복적인 무수히 많은 CRUD 쿼리를 작성하는데에 많은 시간과 비용이 소모되고 있다. 

또한 테이블 객체에 컬럼이 추가되거나 기존 컬럼에 변경이 생기는 경우,

관련된 모든 SQL 쿼리들을 찾아 모조리 수정해줘야 한다는 점에서 생산성이 떨어진다고 할 수 있다.

 

JPA 장점

JPA를 이용하면 반복적인 CRUD 쿼리 작성에 대한 수고를 없앨 수 있고, 

마치 자바 컬렉션에 데이터를 저장하듯 JPA객체에 저장할 데이터를 전달만 하면되기 때문에 생산성 향상과 유지보수에 용이하다. 

또한, MySql이나 Oracle DB 벤더에 의존적이지 않고 독립성이 있어, 프로젝트 진행 중 혹은 서비스 운영중 DBMS시스템 변경에 대해서도 유연하게 대처할 수 있다. 

 spring framework자체에서도 스프링 데이터 JPA라는 기술로 적극 지원하고 있고,

국내는 myBatis 이용률이 앞도적으로 높은편이지만, 전 세계적인 추세로는 ORM 기술에 대한 비중이 훨씬 높다.

 

 

 

 

 

'JPA' 카테고리의 다른 글

JPA- Entity 객체와 Table 맵핑 방법(복합키 매핑)  (0) 2020.04.12

+ Recent posts