Entity
Entity란 JPA에서 관리되는 클래스 즉 객체를 의미합니다.
데이터베이스와의 상호작용을 위한 매핑 정보도 포함되어있습니다.
@Entity
Jpa가 관리할 수 있도록 테이블과 매핑할 클래스에는 필수로 달아주어야한다.
@Entity 어노테이션이 붙은 클래스는 JPA가 관리하게 되며, 이를 엔티티라고 부릅니다.
@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
public class Memo {
...
}
name 속성을 이용하여 엔티티 클래스 이름을 지정할 수 있습니다. (default : 클래스 명)
@Entity(name = "Memo") // JPA가 관리할 수 있는 Entity 클래스 지정
public class Memo {
...
}
주의사항
JPA가 Entity 클래스를 인스턴스화 할 때 기본 생성자를 사용하기 때문에
반드시 현재 Entity 클래스에 기본 생성자가 생성되고 있는지 확인해야합니다.
@Table
엔티티와 매핑할 테이블을 지정해줍니다
name 속성 생략 시 매핑한 Entity 클래스의 이름을 테이블 이름으로 사용합니다.
@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Table(name="Memo") // 매핑 할 테이블의 이름을 지정
public class Memo {
...
}
@Column
테이블의 컬럼을 지정해주는 어노테이션입니다.
@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Table(name = "memo") // 매핑할 테이블의 이름을 지정
public class Memo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
// nullable: null 허용 여부
// unique: 중복 허용 여부 (false 일때 중복 허용)
@Column(name = "username", nullable = false, unique = true)
private String username;
// length: 컬럼 길이 지정
@Column(name = "contents", nullable = false, length = 500)
private String contents;
}
@ID
테이블의 기본 키를 지정해줍니다.
이 기본 키는 영속성 컨텍스트에서 Entity를 구분하고 관리할 때 사용되는 식별자 역할을 수행합니다.
JPA가 제공하는 기본 키 매핑 전략은 크게 직접 할당 방식과 자동 할당 방식으로 나뉩니다.
직접 할당 방식은 말 그대로 개발자가 직접 확인하고 넣어줘야하는 불편함이 발생합니다.
또한 기본키는 식별자 역할을 수행하기에 값을 넣어주지 않은 채로 저장하면 오류가 발생합니다.
그렇기에 기본 할당 방식보다 자동 할당 방식을 추천한다고 합니다.
자동 할당 방식
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
자동 할당 방식은 데이터베이스마다 지원하는 방식이 다르기 때문에 다양한 전략이 있습니다.
그렇기에 DBMS에 알맞은 전략을 지정해주도록해야합니다.
저는 MySQL을 사용하기에 IDENTITY 전략을 사용하였는데요.
IDENTITY 전략
기본키 생성을 데이터베이스에 위임합니다.
주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용합니다.
IDENTITY 전략은 객체를 영속화 시키는 시점에 곧바로 insert 쿼리가 DB로 전송되고, 거기서
반환 받은 식별자 값을 가지고 1차 캐시에 엔티티를 등록시켜 관리합니다.
IDENTITY 전략 이외에 Auto, SEQUENCE, TABLE 전략이 있는데 이 3개는 나중에 써 볼일이 있을 때
정리해보려고 합니다.
'TIL' 카테고리의 다른 글
영속성 컨텍스트 (1) | 2024.10.16 |
---|---|
페이징 조회 - Pageble / PageRequest (0) | 2024.10.15 |
JPA - 댓글 CRUD (2) | 2024.10.14 |
JPA - 일정 CRUD (1) | 2024.10.13 |
JPA (1) | 2024.10.10 |