2024. 8. 12. 18:12ㆍ스프링
2024/08/12
※ Entity에 대해 알아보자.
▶ Entity란?
● Entity : JPA에서 관리되는 클래스 즉, 객체를 의미한다.
● Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리된다.
▶ Entity 클래스 만들기
● 예시 - Memo Entity
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Table(name = "memo") // 매핑할 테이블의 이름을 지정
public class Memo {
@Id
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;
}
▼ SQL 확인
○ create memo table
create table memo (
id bigint not null,
contents varchar(500) not null,
username varchar(255) not null,
primary key (id)
);
○ alter username unique
alter table memo
add constraint username_UK unique (username);
● @Entity : JPA가 관리할 수 있는 Entity 클래스로 지정할 수 있다.
○ @Entity(name = "Memo") : Entity 클래스 이름을 지정할 수 있다. (default는 클래스명)
○ JPA가 Entity 클래스를 인스턴스화 할 때 기본 생성자를 사용하기 때문에
반드시 현재 Entity 클래스에서 기본 생성자가 생성되고 있는지 확인
● @Table : 매핑할 테이블을 지정해준다.
○ @Table(name = "memo") : 매핑할 테이블의 이름을 지정할 수 있다. (default는 클래스명)
● @Column
○ @Column(name = "username") : 필드와 매핑할 테이블의 컬럼을 지정할 수 있다. (default: 객체의 필드명)
○ @Column(nullable = false) : 데이터의 null 값 허용 여부를 지정할 수 있다. (default: true)
○ @Column(unique = true) : 데이터의 중복 값 허용 여부를 지정할 수 있다. (default: false)
○ @Column(length = 500) : 데이터 값(문자)의 길이에 제약조건을 걸 수 있다. (default: 255)
● @Id : 테이블의 기본 키를 지정해준다.
○ 이 기본 키는 영속성 컨텍스트에서 Entity를 구분하고 관리할 때 사용되는 식별자 역할을 수행한다.
👉 따라서 기본 키 즉, 식별자 값을 넣어주지 않고 저장하면 오류가 발생
○ @Id 옵션만 설정하면 기본 키 값을 개발자가 직접 확인하고 넣어줘야 하는 불편함이 발생한다.
✅ @GeneratedValue 옵션을 추가하면 기본 키 생성을 DB에 위임할 수 있다.
📌 @GeneratedValue(strategy = GenerationType.IDENTITY)
@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 bigint not null auto_increment : auto_increment 조건이 추가된 것을 확인할 수 있다.
○ 해당 옵션을 추가해주면 개발자가 직접 id 값을 넣어주지 않아도 자동으로 순서에 맞게 기본 키가 추가된다.
▼ SQL 확인
○ create memo table
create table memo (
id bigint not null auto_increment,
contents varchar(500) not null,
username varchar(255) not null,
primary key (id)
);
오늘은 Entity의 개념과 JPA에서
Entity 클래스를 어떻게 다루는지 알아보았습니다.
다음시간에는 영속성 컨텍스트에 대해 알아보겠습니다.
※ 위 이미지들은 스파르타코딩클럽에 저작권이 있으므로 무단 도용 금지 및 상업 목적으로 사용할 수 없습니다.
'스프링' 카테고리의 다른 글
스프링 - Filter란? (0) | 2024.08.14 |
---|---|
스프링 - 영속성 컨텍스트란? (0) | 2024.08.13 |
스프링 - Spring Data JPA란 무엇일까? (0) | 2024.08.09 |
스프링 - IoC Container와 Bean (0) | 2024.08.08 |
쿠키와 세션이란 무엇일까? (0) | 2024.08.05 |