Java Persistence API (JPA) 어노테이션: 객체-관계 매핑의 핵심

김형진·2024년 3월 7일

Spring

목록 보기
13/15
post-thumbnail

Java Persistence API (JPA)는 자바 개발자가 관계형 데이터베이스를 보다 쉽게 다룰 수 있도록 도와주는 프레임워크입니다. JPA는 객체와 관계형 데이터베이스 간의 매핑을 단순화하고, 객체 지향적인 방식으로 데이터베이스를 다룰 수 있도록 지원합니다. 이를 위해 JPA는 다양한 어노테이션을 제공합니다.

@Entity

@Entity 어노테이션은 JPA 엔터티 클래스를 지정합니다. 엔터티 클래스란 데이터베이스의 테이블과 매핑되는 자바 클래스를 의미합니다. 예를 들어, 사용자 정보를 담고 있는 데이터베이스 테이블과 매핑되는 User 클래스가 있다면, 이 클래스에 @Entity 어노테이션을 추가합니다.

@Entity
public class User {
    // 클래스 내용 생략
}

@Table

@Table 어노테이션은 엔터티 클래스와 매핑되는 데이터베이스 테이블의 세부 정보를 지정합니다. 테이블 이름, 스키마 등을 정의할 수 있습니다.

@Entity
@Table(name = "users")
public class User {
    // 클래스 내용 생략
}

@Id

@Id 어노테이션은 엔터티 클래스의 기본 키를 지정합니다. 기본 키 필드에 이 어노테이션을 추가합니다.

@Entity
public class User {
    @Id
    private Long id;

    // 클래스 내용 생략
}

@GeneratedValue

@GeneratedValue 어노테이션은 기본 키 값의 생성 전략을 지정합니다. 자동으로 증가하는 식별자를 생성하는 데 주로 사용됩니다.

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

    // 클래스 내용 생략
}

@Column

@Column 어노테이션은 엔터티 클래스의 필드와 데이터베이스 테이블의 열을 매핑합니다. 열의 이름, 길이, 널 값 허용 여부 등을 정의할 수 있습니다.

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

    @Column(name = "username", nullable = false, length = 50)
    private String username;

    // 클래스 내용 생략
}

@ManyToOne, @OneToMany, @OneToOne, @ManyToMany

@ManyToOne, @OneToMany, @OneToOne, @ManyToMany 어노테이션들은 엔터티 클래스 간의 관계를 매핑합니다.

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

    // 주문한 사용자
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    // 클래스 내용 생략
}

@JoinColumn
@JoinColumn 어노테이션은 외래 키를 지정합니다. @ManyToOne 또는 @OneToOne과 함께 사용되어 외래 키의 이름 및 참조하는 열을 지정할 수 있습니다.

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

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    // 클래스 내용 생략
}

@NamedQuery, @NamedQueries

@NamedQuery, @NamedQueries 어노테이션들은 이름으로 쿼리를 정의합니다. 엔터티에 대한 정적인 JPQL 쿼리를 정의할 때 사용됩니다.

@Entity
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
public class User {
    // 클래스 내용 생략
}

@Transient

@Transient 어노테이션은 데이터베이스에 저장되지 않는 필드를 지정합니다. 주로 임시적으로 계산된 필드에 사용됩니다.

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

    @Transient
    private boolean active;

    // 클래스 내용 생략
}

JPA 어노테이션들은 객체-관계 매핑을 정의하고 데이터베이스와 객체 간의 연결을 쉽게 관리할 수 있도록 도와줍니다. 이를 통해 개발자는 더욱 객체 지향적인 방식으로 데이터베이스를 다룰 수 있으며, 유지 보수성과 코드의 가독성을 향상시킬 수 있습니다.

0개의 댓글