JPA 테이블 매핑과 어노테이션 가이드

2016. 9. 13. 21:38·Java/JPA
반응형

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
'Java/JPA' 카테고리의 다른 글
  • JPA & Hibernate Cache
  • JPA Cascade Types
Ethan Kang
Ethan Kang
Digital nomad + Software Engineer
    반응형
  • Ethan Kang
    Software Engineer Ethan
    Ethan Kang
  • 전체
    오늘
    어제
    • Programming (105)
      • Java (22)
        • Spring Framework (6)
        • Spring (8)
        • Spring Security (0)
        • JPA (3)
        • MyBatis (1)
        • Servlet, JSP (2)
      • DevOps (4)
        • Kubernetes (2)
        • Docker (1)
        • Terraform (0)
        • Jenkins (0)
        • Bazel (1)
      • Front-End (18)
        • ReactJS (0)
        • Typescript (3)
        • JQuery (1)
        • Java Script (13)
        • RxJS (0)
        • CSS (1)
      • Messaging Queue (1)
        • Kafka (1)
      • Linux (Ubuntu based) (8)
        • Ubuntu (0)
        • CentOS (2)
        • Shell Scripting (2)
      • PHP (5)
        • Laravel (2)
        • PHP 문법 (3)
      • Go (1)
        • Basics (1)
      • Python (16)
        • Flask (1)
        • Django (4)
      • App Development (4)
        • Android (1)
        • Cordova (0)
        • React Native (0)
        • Hybrid Programming (2)
        • IOS (1)
      • Database (4)
        • SQL (0)
        • My SQL (4)
        • MongoDB (0)
      • Shader Programming (0)
      • Tools (5)
        • GIT (2)
      • C# (3)
        • ASP.NET MVC (2)
        • CSharp 파헤치기 (1)
      • 서평 (1)
      • ETC (4)
        • C++ (0)
        • Geo Server (0)
        • NodeJS2 (0)
        • Ruby (2)
        • Elastic Search (0)
        • Camera (0)
        • Open Source (2)
        • WebVR (0)
      • 소프트웨어 이론 (2)
        • TDD (1)
        • Architecture (1)
        • WEB DEV (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 컬러스크립터
  • 공지사항

    • 좋은 프로그래머가 되는 24가지 방법
  • 인기 글

  • 태그

    스프링데이타
    Python
    데이터베이스캐쉬
    django #장고
    mysql데이터복구
    spring
    mybatis
    N+1
    이미지 #jsp
    psr-4
    JPA
    mysql
    VersionControl
    데이터베이스
    Kotlin
    스프링
    java
    autoloading
    자바
    db
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Ethan Kang
JPA 테이블 매핑과 어노테이션 가이드
상단으로

티스토리툴바