0Pricing
Java Academy · 강의

JPA 애너테이션으로 엔터티 매핑

깔끔한 엔터티 설계를 위해 @Entity, @Table, @Id, @GeneratedValue, @Column, @Embedded를 정의합니다.

JPA 애너테이션으로 엔터티 매핑은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

JPA 엔티티 매핑이란 무엇입니까

JPA(Jakarta Persistence API)는 애너테이션을 사용해 Java 클래스를 데이터베이스 테이블에 매핑합니다. Hibernate가 가장 널리 사용되는 JPA 공급자입니다. SQL DDL을 작성할 필요 없이 JPA가 애너테이션에서 스키마를 생성합니다.

@Entity와 @Table

@Entity는 클래스를 JPA 엔티티로 표시합니다. @Table은 테이블 이름, 스키마 및 고유 제약 조건을 사용자 지정합니다. 모든 엔티티에는 인수가 없는 생성자가 있어야 하며, 보호된 생성자여도 됩니다.

@Entity
@Table(name = "users", uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {
    // ...
    protected User() {} // required by JPA
}

@Id와 @GeneratedValue

@Id는 기본 키 필드를 표시합니다. @GeneratedValue는 자동 생성 전략을 구성합니다. IDENTITY는 데이터베이스 자동 증가, SEQUENCE는 데이터베이스 시퀀스이며 대량 삽입에 더 적합하고, AUTO는 자동 선택입니다.

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

@Column: 열 사용자 지정

@Column은 열 이름, 길이, null 허용 여부 및 고유성을 설정합니다. 이를 지정하지 않으면 필드 이름이 열 이름이 됩니다.

@Column(name = "full_name", nullable = false, length = 100)
private String name;
@Column(name = "email", unique = true, nullable = false)
private String email;
@Column(name = "created_at", updatable = false)
private LocalDateTime createdAt;

@Embedded와 @Embeddable

열 그룹을 @Embeddable이 지정된 재사용 가능한 값 객체로 추출할 수 있습니다. 엔티티에서 @Embedded를 사용하면 해당 객체의 필드를 포함할 수 있습니다.

@Embeddable
public class Address {
    private String street, city, country;
    @Column(name = "zip_code") private String zipCode;
}
@Entity
public class User {
    @Embedded private Address address;
}

@Enumerated: 열거형 저장

열거형은 이름 문자열(STRING) 또는 순서형 정수(ORDINAL)로 저장할 수 있습니다. 열거형 값의 순서를 바꾸면 순서형 값이 깨지므로 항상 STRING을 사용하십시오.

@Enumerated(EnumType.STRING)
@Column(nullable = false)
private UserStatus status; // stored as "ACTIVE", "INACTIVE", etc.

@CreationTimestamp와 @UpdateTimestamp

삽입 및 업데이트 시 타임스탬프를 각각 자동으로 설정하는 Hibernate 전용 애너테이션입니다. 수동으로 @PrePersist를 사용할 필요가 없습니다.

@CreationTimestamp
@Column(updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
private LocalDateTime updatedAt;

@Transient: 필드 제외

@Transient가 지정된 필드는 영속화되지 않습니다. 데이터베이스에 저장하지 않아야 하는 파생 필드나 계산 필드에 사용하십시오.

@Transient
public String getFullName() { return firstName + " " + lastName; }

@Lob: 대형 객체

@Lob을 사용하면 대용량 텍스트(TEXT/CLOB) 또는 바이너리(BLOB) 열에 매핑할 수 있습니다. PostgreSQL은 @Lob String을 TEXT로 매핑합니다.

@Lob
@Column(name = "content")
private String content; // maps to TEXT in PostgreSQL

equals와 hashCode 계약

컬렉션에 저장되는 JPA 엔티티는 비즈니스 키를 기준으로 equals/hashCode를 구현해야 합니다. 생성되는 ID는 영속화 전에는 null이므로 기준으로 사용하지 마십시오. @NaturalId 또는 UUID 대체 키를 사용하십시오.

@Override public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof User u)) return false;
    return email != null && email.equals(u.email);
}
@Override public int hashCode() { return getClass().hashCode(); }

낙관적 잠금을 위한 @Version

@Version 필드를 추가합니다. Hibernate는 업데이트할 때마다 이 값을 증가시킵니다. 두 트랜잭션이 같은 행을 동시에 업데이트하면 두 번째 트랜잭션에서 OptimisticLockException이 발생합니다.

@Version
private Long version; // auto-managed by Hibernate

간단한 확인

@Enumerated에서 ORDINAL 대신 STRING을 사용해야 하는 이유는 무엇입니까?

복습

@Entity/@Table로 클래스와 테이블을 매핑합니다. 기본 키에는 @Id+@GeneratedValue를 사용합니다. 제약 조건에는 @Column을 사용합니다. 값 객체에는 @Embedded를 사용합니다. 항상 @Enumerated(STRING)을 사용하고, 낙관적 잠금에는 @Version을 추가하십시오.

자주 묻는 질문

“JPA 애너테이션으로 엔터티 매핑” 강의는 무료인가요?

네 — “JPA 애너테이션으로 엔터티 매핑” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“JPA 애너테이션으로 엔터티 매핑”에서 뭘 배우나요?

깔끔한 엔터티 설계를 위해 @Entity, @Table, @Id, @GeneratedValue, @Column, @Embedded를 정의합니다. 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“JPA 애너테이션으로 엔터티 매핑” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. JPA 애너테이션으로 엔터티 매핑
  2. Spring Data 리포지터리와 쿼리 메서드
  3. 일대다 및 다대다 관계
  4. 페이지 매김, 정렬 및 프로젝션
← Java Academy(으)로 돌아가기