
Java Persistence API (JPA)는 자바 개발자가 관계형 데이터베이스를 보다 쉽게 다룰 수 있도록 도와주는 프레임워크입니다. JPA는 객체와 관계형 데이터베이스 간의 매핑을 단순화하고, 객체 지향적인 방식으로 데이터베이스를 다룰 수 있도록 지원합니다. 이를 위해 JPA는 다양한 어노테이션을 제공합니다.
@Entity 어노테이션은 JPA 엔터티 클래스를 지정합니다. 엔터티 클래스란 데이터베이스의 테이블과 매핑되는 자바 클래스를 의미합니다. 예를 들어, 사용자 정보를 담고 있는 데이터베이스 테이블과 매핑되는 User 클래스가 있다면, 이 클래스에 @Entity 어노테이션을 추가합니다.
@Entity
public class User {
// 클래스 내용 생략
}
@Table 어노테이션은 엔터티 클래스와 매핑되는 데이터베이스 테이블의 세부 정보를 지정합니다. 테이블 이름, 스키마 등을 정의할 수 있습니다.
@Entity
@Table(name = "users")
public class User {
// 클래스 내용 생략
}
@Id 어노테이션은 엔터티 클래스의 기본 키를 지정합니다. 기본 키 필드에 이 어노테이션을 추가합니다.
@Entity
public class User {
@Id
private Long id;
// 클래스 내용 생략
}
@GeneratedValue 어노테이션은 기본 키 값의 생성 전략을 지정합니다. 자동으로 증가하는 식별자를 생성하는 데 주로 사용됩니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// 클래스 내용 생략
}
@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 어노테이션들은 엔터티 클래스 간의 관계를 매핑합니다.
@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 어노테이션들은 이름으로 쿼리를 정의합니다. 엔터티에 대한 정적인 JPQL 쿼리를 정의할 때 사용됩니다.
@Entity
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
public class User {
// 클래스 내용 생략
}
@Transient 어노테이션은 데이터베이스에 저장되지 않는 필드를 지정합니다. 주로 임시적으로 계산된 필드에 사용됩니다.
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Transient
private boolean active;
// 클래스 내용 생략
}
JPA 어노테이션들은 객체-관계 매핑을 정의하고 데이터베이스와 객체 간의 연결을 쉽게 관리할 수 있도록 도와줍니다. 이를 통해 개발자는 더욱 객체 지향적인 방식으로 데이터베이스를 다룰 수 있으며, 유지 보수성과 코드의 가독성을 향상시킬 수 있습니다.