반응형
JPA 테이블 매핑과 어노테이션 가이드
JPA(Java Persistence API)에서 테이블을 정의하는 방법에 대해 자세히 알아보겠습니다. JPA는 자바 애플리케이션에서 관계형 데이터베이스를 객체지향적으로 사용할 수 있게 해주는 기술입니다.
기본 엔티티 매핑
가장 기본적인 엔티티 매핑에는 다음과 같은 어노테이션들이 사용됩니다:
@Entity
클래스가 JPA 엔티티임을 나타냅니다. 이 어노테이션이 적용된 클래스는 데이터베이스 테이블과 매핑됩니다.
@Entity
public class Order {
// 클래스 내용
}
@Table
엔티티와 매핑할 테이블을 지정합니다. 생략하면 엔티티 이름이 테이블 이름으로 사용됩니다.
@Entity
@Table(name = "ORDERS",
uniqueConstraints = {@UniqueConstraint(
name = "NAME_AGE_UNIQUE",
columnNames = {"NAME", "AGE"})})
public class Order {
// 클래스 내용
}
기본 키 매핑
@Id와 @GeneratedValue
기본 키 매핑을 위해 사용되며, 데이터베이스별로 다른 생성 전략을 사용할 수 있습니다:
// MySQL
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// Oracle
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
// H2
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
필드 매핑
@Column
컬럼 매핑을 세밀하게 제어할 수 있습니다:
@Column(name = "ORDER_DATE",
nullable = false,
length = 10,
updatable = false)
private String orderDate;
@Temporal
날짜 타입 매핑에 사용됩니다:
@Temporal(TemporalType.TIMESTAMP)
private Date orderDate;
@Enumerated
열거형 타입 매핑에 사용됩니다:
@Enumerated(EnumType.STRING)
private OrderStatus status;
연관관계 매핑
@OneToMany
일대다 관계를 매핑합니다:
@OneToMany(mappedBy = "order")
private List<OrderItem> orderItems = new ArrayList<>();
@ManyToOne
다대일 관계를 매핑합니다:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "MEMBER_ID")
private Member member;
실전 예제
다음은 주문 시스템의 완전한 엔티티 예제입니다:
@Entity
@Table(name = "ORDERS")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ORDER_ID")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "MEMBER_ID")
private Member member;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems = new ArrayList<>();
@Temporal(TemporalType.TIMESTAMP)
private Date orderDate;
@Enumerated(EnumType.STRING)
private OrderStatus status;
// 연관관계 편의 메서드
public void setMember(Member member) {
this.member = member;
member.getOrders().add(this);
}
public void addOrderItem(OrderItem orderItem) {
orderItems.add(orderItem);
orderItem.setOrder(this);
}
}
참고 자료
이 내용은 다음 자료들을 참고하여 작성되었습니다:
- JPA 공식 문서: Jakarta Persistence
- Spring Data JPA 레퍼런스: Spring Data JPA - Reference Documentation
주의사항
- @GeneratedValue 전략은 데이터베이스에 따라 적절한 것을 선택해야 합니다
- @OneToMany, @ManyToOne 관계에서는 성능을 위해 지연 로딩(LAZY)을 권장합니다
- 양방향 관계에서는 연관관계의 주인을 명확히 설정해야 합니다
이러한 JPA 엔티티 매핑을 통해 객체와 테이블을 효과적으로 매핑하고, 객체지향적인 도메인 모델을 구축할 수 있습니다.
반응형
'Java > JPA' 카테고리의 다른 글
JPA & Hibernate Cache (0) | 2022.01.19 |
---|---|
JPA Cascade Types (0) | 2021.12.19 |