JPA

객체와 테이블 매핑

coding-orange 2024. 1. 2. 15:48
728x90

 

 

 

01. @Entity

 

 

@Entity란?

  • @Entity가 붙은 클래스는 JPA가 관리한다.
  • JPA로 테이블과 매핑할 클래스는 @Entity를 꼭! 붙여야 한다.

 

 

@Entity 사용 시 주의할 점

  • 파라미터가 없고 접근 지정자는 public 혹은 protected인 기본 생성자가 필수로 있어야 한다.
  • final 클래스, inner 클래스, enum, interface 에 사용하면 안된다.
  • 저장할 필드에 final을 사용하면 안된다.

 

 

@Entity의 속성 name

  • JPA에서 사용할 엔티티 이름을 지정한다.
  • 기본값은 클래스 이름을 그대로 사용하는 것이다.
  • 같은 클래스 이름이 없으면 가급적 기본값을 사용하는 것이 좋다.

 

 

 

 


 

 

 

02. @Table

 

 

 

@Table이란?

엔티티와 매핑할 테이블을 지정하는 것이다.

 

 

 

 

@Table의 속성

  • 참고로 name 속성의 기본값은 엔티티 이름을 사용하는 것이다.

 

속성 기능
name 테이블 명 지정
catalog 카탈로그 지정
schema 스키마 지정
uniqueConstraints(DDL) 제약조건 명시

 

 

 

 


 

 

 

03. 예시 코드

 

 

 

@Entity 예제 코드 - Member 클래스

  • @Entity를 이용해 이 클래스가 JPA에서 관리될 것을 명시했다.
  • 별도로 이름을 지정해주지 않았기 때문에 엔티티의 이름은 기본값은 해당 클래스의 이름인 Member로 지정된다

 

package hellojpa;

import javax.persistence.*;

@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Member {
    @Id
    private Long id;  
    private String name;
}

 

 

 

 

@Entity 예제 코드 - JpaMain 클래스

  • id가 1이고 name이 first인 하나의 멤버를 만들어 저장하는 코드이다.
  • 실행 로그의 쿼리문을 보면, 엔티티 이름으로 Member가 사용된 것을 볼 수 있다.
package hellojpa;
import javax.persistence.*;

public class JpaMain {
    public static void main(String[] args) {  

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");  
        EntityManager em = emf.createEntityManager();  
        EntityTransaction tx = em.getTransaction();  
        tx.begin();  

        try {  
                Member member = new Member(1L, "first");  
                em.persist(member);  
                tx.commit();  
        } catch (Exception e) {  
                tx.rollback();  
        } finally {  
                em.close();  
        }  
        emf.close();  
    }

}

 

 

 

 

 

@Table 예제 코드

  • 다음과 같이 작성한다. 나머지 Member 클래스와 JpaMain 코드는 위와 동일하다.
  • @Table로 name을 MBR로 지정해주면 DB의 MBR라는 테이블과 Member 객체를 매핑하겠다는 뜻이다.
  • 실행 로그의 쿼리문을 보면 위에서는 Member 였던 부분이 MBR로 바뀐 것을 볼 수 있다.
// Member 클래스의 선언 위에
@Table(name = "MBR")
// JpaMain 클래스의 Member 객체 삽입 하는 부분 코드 수정 (같은 PK로 값을 넣을 경우 오류 발생하기 때문! 혹은 1L 레코드를 지우는 방법도 있다.)
Member member = new Member(2L, "second");

 

insert into MBR로 바뀌었다!

 

 

 


 

 

다음과 같이 정리할 수 있다.

 

Annotation Description
@Entity, @Table 객체와 테이블 매핑
@Column 필드와 컬럼 매핑
@Id 기본 키 매핑
@ManyToOne, @JoinColumn 연관관계 매핑

 

 

728x90