twocowsong

JPA - @Entity, @Table, @Id, @Column 본문

IT/JPA

JPA - @Entity, @Table, @Id, @Column

WsCode 2022. 4. 25. 21:25

깃허브 정리 URL : https://github.com/sWineTake/jpa.git

H2 데이터 베이스 다운로드 경로 : https://www.h2database.com/html/main.html

 

 

 

깃에서 work_220425브랜치를 보시면됩니다. 아래의 내용이 커밋되어있습니다.

CREATE TABLE MEMBER (
   ID VARCHAR(255) NOT NULL,
   NAME VARCHAR(255),
   AGE INTEGER NOT NULL,
   PRIMARY KEY (ID)
)

script.sql에 위와같은 테이블을 생성시켰습니다.

 

<!-- JPA, 하이버네이트 -->
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate-entitymanager</artifactId>
   <version>5.6.8.Final</version>
</dependency>
<!-- H2데이터 베이스 -->
<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <version>1.4.200</version>
</dependency>

위에 2개의 라이브러리를 pom.xml에 추가하였습니다.

JPA에 하이버네이트 구현체를 사용하려면 많은 라이브러리가 필요하지만 핵심 라이브러리는 다음 2가지입니다.

 

JPA, 하이버 네이트 : JPA표준과 하이버 네이트를 포함하는 라이브러리입니다.

hibernate-core.jar , hibernate-jpa-2.1.-api.jar 파일도 함께 내려받습니다.

 

H2데이터베이스 : H2 DB에 접속해야 하므로 h2 라이브러리 같이받습니다.

 

Member.java

@Getter
@Setter
@Entity
@Table(name = "MEMBER")
public class Member {

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

	@Column(name = "NAME")
	private String username;
	
	private Integer age;

}

회원 클래스에 매핑정보를 표시하는 어노테이션을 몇 개 추가하였습니다. 여기서 @Entity, @Table, @Column이 매핑 정보입니다. JPA는 매핑 어노테이션을 분석해서 어떤 객체가 어떤 테이블과 관계가 있는지 알아냅니다.

 

@Entity

- 테이블과 매핑한다고 JPA에게 알려줍니다. 이렇게 @Entity가 사용된 클래스를 엔티티 클래스라고 합니다.

 

@Table

- 앤티티 클래스에 매핑할 테이블 정보를 알려줍니다. 여기서는 name 속성을 사용해서 Member 엔티티를 Member 테이블에 맵핑했습니다. @Table 생략 시 클래스 이름을 테이블 이름으로 매핑합니다.

 

@Id

- 엔티티 클래스의 필드를 테이블의 기본 키에 매핑합니다. @Id가 사용된 필드를 식별자 필드라고 합니다.

 

@Column

- 필드를 컬럼에 매핑합니다. 여기서는 name 속성을 사용해서 Member엔티티의 username필드를 MEMBER테이블 NAME컬럼에 매핑했습니다.

 

매핑정보가 없는 필드

age필드에는 매핑 어노테이션이 없습니다. 이렇게 생략하면 필드명을 사용해서 컬럼명으로 매핑합니다. 여기서는 필드명이 age이므로 age컬럼으로 매핑했습니다. 참고로 대소문자를 구분하는 DB를 사용하면 @Column(name="AGE")처럼 명시적으로 매핑해야 합니다.

'IT > JPA' 카테고리의 다른 글

JPA - 엔티티 매니저  (0) 2022.04.27
JPA - hibernate.dialect (데이터베이스 방언)  (0) 2022.04.26
JPA persistence.xml  (0) 2022.04.26
JPA란 무엇인가?  (0) 2022.04.24
JPA를 사용 해야하는 이유  (0) 2022.04.23