12월 14일 -JPA 테이블 매핑과 필드 타입 매핑

Yullgiii·2023년 12월 14일
0
post-thumbnail

JPA 테이블 매핑

JPA에서는 @Entity, @Table, @Id, @GeneratedValue, @Column, @Temporal, @Transient 등의 어노테이션을 사용하여 테이블을 매핑한다.

@Entity: 객체를 테이블과 매핑할 때 사용. 이 어노테이션을 사용한 클래스는 JPA가 관리하는 것으로, '엔티티'라고 부른다.
@Table: 엔티티가 매핑될 테이블 정보를 명시한다. 테이블의 이름은 SQL에서 사용되며, @Entity의 이름이 기본값으로 설정된다.
@Id: 엔티티의 주키를 맵핑할 때 사용한다. 모든 엔티티는 주키를 가져야한다.
@GeneratedValue: 주키의 생성 방법을 명시한다. 주키 생성 전략과 생성기를 설정할 수 있다.
@Column: 필드를 컬럼과 매핑할 때 사용한다. unique, nullable, length 등의 속성을 설정할 수 있다.
@Temporal: 날짜 타입을 매핑할 때 사용한다. JPA 2.1까지는 Date와 Calendar만 지원한다.
@Transient: 이 어노테이션이 붙은 필드는 매핑을 무시한다. 따라서 DB에 저장하지 않는다.

아래는 이를 사용한 예시 코드이다.

@Entity(name = "parent")
public class Parent {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @ManyToMany
    @JoinTable(
        name = "parent_child",
        joinColumns = @JoinColumn(name = "parent_id"),
        inverseJoinColumns = @JoinColumn(name = "child_id")
    )
    private List<Child> childList;
}

JPA 필드 타입 매핑

JPA에서는 @Column, @Enumerated, @Embeddable, @Embedded, @AttributeOverrides, @AttributeOverride 등의 어노테이션을 사용하여 필드 타입을 매핑한다.

@Column: 필드를 컬럼과 매핑할 때 사용한다. String, Date, Boolean 등의 타입들에 공통으로 사이즈를 제한하는 용도로 쓰인다.
@Enumerated: Enum 타입을 매핑할 때 사용한다. 실무에서는 @Enumerated(EnumType.STRING)으로 사용하는 것을 권장한다.
@Embeddable과 @Embedded: 임베디드 타입을 만들고 사용할 때 사용한다. 임베디드 타입은 여러 엔티티에서 공통으로 사용하는 복합적인 값 타입을 재사용할 수 있게 해준다.
@AttributeOverrides와 @AttributeOverride: 임베디드 타입에 정의한 매핑정보를 재정의할 때 사용한다.

아래는 이를 사용한 예시 코드이다.

@Entity
public class Account {
    @Id @GeneratedValue
    private Long id;

    @Embedded
    @AttributeOverrides({
        @AttributeOverride(name = "street", column = @Column(name = "home_street"))
    })
    private Address address;
}
@Embeddable
public class Address {
    private String street;
    private String city;
    private String state;
    private String zipCode;
}
profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글