ballqs 님의 블로그
[Spring] JPA 매핑 기능 본문
JPA 테이블 매핑 기능
@Entity
- 객체 관점에서의 이름
- 디폴트로 클래스명으로 설정됨
- 엔티티의 이름은 JQL에서 쓰임
- JQL : Entity 명으로 쿼리짤때 쓰이는 언어 (ex. JPQL, QueryDsl)
@Table
- RDB 의 테이블 이름
- @Entity의 이름이 테이블의 기본값
- 주로 Entity 이름과 다르게 Table 명을 지정하고 싶을때 아래와 같이 사용
@Entity
@Table(name = "users")
public class User () {...}
- 테이블의 이름은 SQL에서 쓰임
- SQL : Table 명으로 쿼리짤때 쓰이는 언어 (ex. JDBC, SQL Mapper)
@Id
- 엔티티의 주키를 맵핑할 때 사용
- 자바의 모든 primitive 타입과 그 랩퍼 타입을 사용할 수 있음
- Date랑 BigDecimal, BigInteger도 사용 가능
- 복합키를 만드는 맵핑하는 방법도 있지만 그건 논외로..
@GeneratedValue
- 주키의 생성 방법을 맵핑하는 애노테이션
- 생성 전략과 생성기를 설정할 수 있다
- 기본 전략은 AUTO: 사용하는 DB에 따라 적절한 전략 선택
- TABLE, SEQUENCE, IDENTITY 중 하나
@Column
- unique
- nullable
- length
- columnDefinition
- ...
JPA 필드 타입 매핑 기능
Value 타입 종류
기본 타입
- @Column
- String, Date, Boolean, 과 같은 타입들에 공통으로 사이즈 제한, 필드명 지정과 같이 옵션을 설정할 용도로 쓰인다.
- Class 에 @Entity 가 붙어있으면 자동으로 필드들에 @Column 이 붙음
- @Enumerated
- Enum 매핑용도로 쓰이며 실무에서는 @Enumerated(EnumType.*STRING*) 으로 사용권장
- Default 타입인 ORDINAL 은 0,1,2.. 값으로 들어가기 때문에 추후 순서가 바뀔 가능성있다.
Composite Value 타입
- @Embeddable : 복합 값 객체로 사용할 클래스 지정
- @Embedded : 복합 값 객체 적용할 필드 지정
@Embeddable
public class Address {
private String city;
private String street;
}
- @AttributeOverrides : 복합 값 객체 여러개 지정
- @AttributeOverride : 복합 값 객체 필드명 선언
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@Setter
@Getter
public class Member{
@Id @GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "city", column = @Column(name = "home_city")),
@AttributeOverride(name = "street", column = @Column(name = "home_street")),
})
private Address homeAddress;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "city", column = @Column(name = "company_city")),
@AttributeOverride(name = "street", column = @Column(name = "company_street")),
})
private Address companyAddress;
}
생성되는 테이블
CREATE TABLE MEMBER (
MEMBER_ID BIGINT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(255) NOT NULL,
home_city VARCHAR(255) NOT NULL, # Embedded address.city
home_street VARCHAR(255) NOT NULL, # Embedded address.street
company_city VARCHAR(255) NOT NULL, # Embedded address.city
company_street VARCHAR(255) NOT NULL, # Embedded address.street
PRIMARY KEY (MEMBER_ID)
);
'코딩 공부 > Spring' 카테고리의 다른 글
[Spring] @Async 란? (0) | 2024.10.04 |
---|---|
[Spring] JpaRepository 쿼리 사용 방법 및 효율적으로 사용 방법 (0) | 2024.09.26 |
[Spring] @TransactionalEventListener란? (0) | 2024.09.20 |
[Spring] @Mock , @MockBean 의 차이점 (0) | 2024.09.14 |
[Spring] @Configuration 란? (0) | 2024.09.14 |