➡️ 데이터베이스 관련 애너테이션
// EX.
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "user_name", nullable = false, unique = true, length = 50)
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
✅ @Id
: JPA(Java Persistence API)에서 엔티티 클래스의 기본 키(primary key)를 지정하는데 사용된다. 기본 키는 엔티티를 고유하게 식별하는 데 사용되며, 데이터베이스 테이블에서는 이 기본 키를 사용하여 특정 레코드를 식별한다.
예를 들어, User 엔티티 클래스에서 id 필드를 기본 키로 지정해보자. 위의 예제에서 @Id 어노테이션이 지정된 id 필드는 User 엔티티의 기본 키(primary key)를 나타낸다. 이렇게 지정된 필드는 JPA에 의해 엔티티 클래스와 데이터베이스 테이블의 기본 키로 매핑되는 것이다.
✅ @GeneratedValue(strategy=GenerationType.AUTO)
: JPA(Java Persistence API)에서 엔티티의 기본 키(primary key) 값을 자동으로 생성하는 방법을 지정하는데 사용된다.
strategy 속성은 기본 키 값을 생성하는 전략을 지정하며, GenerationType.AUTO 전략을 선택한 경우 데이터베이스에 따라 기본 키 값을 자동으로 생성된다.
이는 유용한 기능이긴 하지만 대부분의 경우에는 데이터베이스에서 지원하는 자동 증가(auto-increment) 기능으로 이를 대신하곤 한다. 예를 들어, MySQL 데이터베이스에서는 AUTO_INCREMENT를 사용하여 기본 키 값을 자동으로 증가시킬 수 있다.
✅ @Column
: JPA(Java Persistence API) 엔티티 클래스의 필드를 데이터베이스 테이블의 열(column)에 매핑하는데 사용된다. 즉, 어노테이션을 사용하여 엔티티 클래스의 필드와 데이터베이스 테이블의 열 사이의 매핑을 정의하는 것이다. 이러한 @Column 애너테이션에 쓰이는 몇 가지 속성을 살펴보자.
- name : 데이터베이스 테이블의 열 이름을 지정한다. 이때, 기본값은 필드의 이름과 같다.
- nullable : 해당 필드가 null 값을 허용하는지 여부를 지정한다. 이때, 기본값은 true이다.
- unique : 해당 필드가 고유한(unique) 값을 가져야 하는지 여부를 지정 한다. 이때, 기본값은 false다.
- length : 문자열 필드의 길이를 지정 한다. 이때, 기본값은 255다.
- precision와 scale : 숫자 필드의 정밀도와 스케일을 지정 한다. 이때, 기본값은 0다.
위 예제에서 처럼 User 엔티티 클래스에서 name 필드를 데이터베이스 테이블의 user_name 열에 매핑하는 경우, 해당 애너테이션의 역할은 무엇일까? @Column 어노테이션을 사용하여 name 필드를 데이터베이스 테이블의 user_name 열에 매핑하고, 해당 열이 null 값을 허용하지 않으며(unique 속성을 통해) 고유한 값을 가져야 하며, 최대 길이가 50자여야 함을 지정하고 있다.
✅ @Query("쿼리문 작성하기")
: JPA를 활용한 엔티티인 Repository에서 @Query 애너테이션을 활용하면, SQL문을 직접 작성할 수 있게 해준다.