반응형
1. 객체와 테이블 매핑
객체와 테이블 매핑(Object-Relational Mapping, ORM)은 JPA를 사용하여 자바 객체를 데이터베이스의 테이블과 연결하는 것을 의미한다.
이를 통해 개발자는 SQL을 직접 작성하지 않고도 객체 지향적인 방식으로 데이터를 관리할 수 있다.
✅ 객체와 테이블 매핑을 위한 기본 어노테이션
- @Entity : JPA에서 관리하는 엔티티 객체로 지정
- @Table(name = "테이블명") : 특정 테이블과 매핑 (기본값: 클래스명과 동일)
@Entity
@Table(name = "members") // 실제 데이터베이스 테이블 이름 지정
public class Member {
@Id
@GeneratedValue
private Long id;
private String name;
}
🔹 주요 특징
- @Entity가 선언된 클래스는 JPA가 관리하는 객체가 됨
- @Table을 사용하여 명시적으로 테이블명을 지정 가능
2. 데이터베이스 스키마 자동 생성
JPA는 애플리케이션 실행 시 자동으로 데이터베이스 테이블을 생성할 수 있다.
이 기능은 hibernate.hbm2ddl.auto 속성을 통해 설정한다.
✅ 스키마 자동 생성 옵션
값 | 설명 |
create | 기존 테이블 삭제 후 다시 생성 |
create-drop | 애플리케이션 종료 시 테이블 삭제 |
update | 변경 사항만 반영 (기존 데이터 유지) |
validate | 테이블과 엔티티가 매핑되는지 검증 (변경 X) |
none | 자동 생성 기능 비활성화 |
application.properties 설정
spring.jpa.hibernate.ddl-auto=update
3. 필드와 컬럼 매핑
JPA에서 객체의 필드를 데이터베이스 컬럼과 매핑할 때는 @Column 어노테이션을 사용한다.
기본적인 컬럼 매핑 예제
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
@Column(name = "user_name", length = 50, nullable = false, unique = true)
private String name;
}
✅ 컬럼 매핑 주요 속성
속성 | 설명 |
name | 컬럼명 지정 (기본값: 필드명) |
length | 문자열 컬럼 길이 (기본값: 255) |
nullable | false이면 NOT NULL |
unique | true이면 유니크 제약 조건 추가 |
columnDefinition | 컬럼 속성을 직접 정의 (TEXT, VARCHAR(255) 등) |
@Column(columnDefinition = "TEXT") // TEXT 타입으로 지정
private String description;
4. 기본 키 매핑
JPA에서 기본 키(PK)를 매핑할 때는 @Id를 사용하며, 자동 생성하려면 @GeneratedValue를 추가한다.
기본 키 생성 전략에는 4가지가 있다.
기본 키 매핑 예제
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // 기본 키 자동 증가
private Long id;
}
✅ 기본 키 생성 전략 비교
전략 | 설명 |
IDENTITY | DB의 AUTO_INCREMENT 사용 (MySQL, PostgreSQL 등) |
SEQUENCE | DB의 시퀀스 사용 (Oracle, PostgreSQL 등) |
TABLE | 키 생성 전용 테이블 사용 |
AUTO | 데이터베이스에 맞게 자동 선택 (기본값) |
5. 정리
✅ JPA를 활용한 매핑 개념 정리
- 객체와 테이블 매핑 : @Entity와 @Table 사용
- 데이터베이스 스키마 자동 생성 : hibernate.hbm2ddl.auto 옵션 활용
- 필드와 컬럼 매핑 : @Column으로 속성 지정
- 기본 키 매핑 : @Id와 @GeneratedValue로 자동 생성 가능
반응형
'Backend > JPA' 카테고리의 다른 글
JPA 다양한 연관관계 매핑 개념과 실전 적용 방법 (0) | 2025.02.21 |
---|---|
JPA 연관관계 매핑 - 객체와 테이블의 관계 (0) | 2025.02.20 |
JPA - 영속 상태와 준영속 상태의 차이 및 준영속 상태 만드는 방법 (0) | 2025.02.12 |
JPA - flush()란? (0) | 2025.02.12 |
JPA - 영속성 컨텍스트 (Persistence Context) 특징 (0) | 2025.02.11 |