Spring/JPA

[Spring/JPA] JPA 객체 매핑

오잎 클로버 2022. 5. 27. 09:30
728x90

※ 본 글은 저자 김영한 개발자의 "자바 ORM 표준 JPA 프로그래밍"의 내용을 요약하였습니다. ※

기존 테이블을 생성하기 위해서는 DDL을 사용하여 다음과 같은 방식으로 테이블을 생성했어야 했으며,

예외란 존재하지 않았다. 개발자가 직접 DDL를 작성했어야 했다.

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

하지만 JPA(=자바 진영 ORM)의 등장으로 위 테이블을 매핑하여 객체지향적인 방식으로 구현이 가능하다.

매핑을 하기에 앞서 우선 자바 코드로 객체화시켜보면 다음과 같다.

public class Member { 
    private String id;
    private String username;
    private Integer age;
    
    public void setId(String id) {
    	this.id = id;
    }
    
    public void setUsername(String username) {
    	this.username = username;
    }
    
    public void setAge(Integer age) {
    	this.age = age;
    }
    
    public String getId() {
    	return age;
    }
    
    public String getUsername() {
    	return username;
    }
    
    public Integer getAge() {
    	return age;
    }
    
}

롬복(Lombok)을 사용한다면 더 깔끔한 코드로 보일 것이다.

위 클래스는 맨 처음에 있던 DDL에 맞는 객체이다. 위 클래스를 JPA가 매핑할 수 있도록 명시하는 방식은 다음과 같다.

@Getter @Setter		// Getter, Setter Lombok을 사용함으로써 깔끔해진다.
@Entity
@Table(name="MEMBER")
public class Member { 

    @Id
    @Column
    private String id; 

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

    private Integer age;
}

 

 

 

 

JPA 어노테이션을 총 4개, @Entity, @Table, @Id, @Column 사용하였다. 해당 어노테이션이 무슨 의미를 하고 어떤 일을 수행하는지는 다음과 같다.

@Entity

이 클래스를 테이블과 매핑한다고 JPA에게 알린다. 이렇게 @Entity가 사용된 클래스를 엔티티 클래스(이하 엔티티)라고 한다.

@Table

엔티티 클래스에 매핑할 테이블 정보를 알려준다. 여기서는 name 속성을 사용해서 Member 엔티티를 MEMBER 테이블에 매핑한다. (더 정확히는 엔티티명을 사용한다.)

@Id

엔티티 클래스의 필드를 테이블의 기본 키에 매핑한다. 여기서는 엔티티의 id 필드를 테이블의 ID 기본키 칼럼에 매핑했다. 이렇게 @Id가 사용된 필드를 식별자 필드라고 한다.

@Column

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

 

이렇듯 JPA와 관련된 어노테이션 4가지 모두 매핑과 관련된 어노테이션임을 알았지만, age 필드에는 아무런 어노테이션이 없는 데, 만일 이런 경우에는 JPA가 다음과 같은 조치를 취해준다.

매핑 정보가 없는 필드

매핑 어노테이션을 생략한 필드의 경우, 필드명을 사용하여 칼럼명으로 매핑한다.

여기서는 필드명이 age이므로 age 칼럼으로 매핑한다.

※ 참고 대소문자를 구분하는 데이터베이스인 경우, 명시적으로 매핑해야 한다.

 

원래 JPA는 persistence.xml를 사용해서 필요한 설정 정보를 관리한다. 이 설정 파일이 META-INF/persistence.xml 클래스 패스에 있다면, 별도의 설정 없이 JPA가 인식할 수 있다.

 

이상입니다.

JPA 59/735페이지

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

[Spring/JPA] JPA 연관관계  (0) 2023.02.13
[Spring/JPA] JPA(Hibernate 구현체) DDL 전략  (0) 2022.06.17
[Spring/JPA] EntityManager, EntityManagerFactory  (0) 2022.06.03
[Spring/JPA] JPA 소개  (0) 2022.05.25
[Spring/JPA] JPA의 등장배경  (0) 2022.05.18