[Spring/기초] Entity 만들기Spring/Spring 기초2024. 1. 20. 20:37
Table of Contents
728x90
반응형
Entity 란?
데이터 베이스 테이블과 Mapping되는 자바 클래스를 말한다.
1. Entitiy Class 만들기
import jakarta.persistence.*;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "username", nullable = false, unique = true)
private String username;
@Column(name = "email", nullable = false)
private String email;
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)
private User user;
@OneToMany(mappedBy = "user")
private List<Comment> comments;
}
위 코드는 Entity class 파일이다.
jakarta.persistence
이 패키지는 자바 표준 JPA 패키지이다.
애플리케이션의 객체 모델과 데이터 베이스의 테이블 간의 매핑을 단순화 하고 추상화 하도록 도와준다.
- @Entity: 엔티티 클래스를 나타내는 어노테이션.
- @Id: 엔티티 클래스에서 기본 키(primary key)를 나타내는 어노테이션.
- @GeneratedValue: 기본 키의 값을 자동으로 생성하는 전략을 지정하는 어노테이션.
- @Column: 엔티티 클래스의 필드를 데이터베이스 테이블의 컬럼에 매핑하는 어노테이션.
- @ManyToOne: 다대일(N:1) 관계를 나타내는 어노테이션.
- @JoinColum : 연관된 Entity의 외래 키를 지정한다.
- @OneToMany : 일대다(1:N) 관계를 나타내는 어노테이션.
- @mappedBy : 양방향 관계에 연관된 Entitiy의 필드를 지정한다.
- @ManyToMany : 다대다(N:M) 관계를 나타내는 어노테이션.
- EntityManager: JPA를 통해 데이터베이스와 상호 작용하는데 사용되는 인터페이스.
2. 설정 옵션들
GeneratedValue
엔티티의 기본 키를 어떻게 자동으로 생성할지를 결정할때 사용한다. 보통 1,2,3,... 이렇게 증가한다.
1. strategy :
기본 키 값을 생성하는 전략
옵션
- AUTO :
기본 키 생성 방식을 자동으로 선택한다. 데이터베이스에 따라서 아래의 것들이 자동으로 선택된다. - IDENTITY :
데이터 베이스의 IDENTITY 컬럼을 사용해 기본키를 생성가능하다. (MySQL 같은 곳에서 사) - SEQUENCE :
데이터 베이스의 시퀀스를 사용해서 기본 키를 생성한다. (Oracle 같은 곳에서 사용) - TABLE :
데이터 베이스의 테이블을 사용해서 기본 키를 생성한다.
2. generator :
generator의 이름을 지정한다.
@GeneratedValue(strategy = GenerationType.TABLE, generator = "my_generator")
3. initialValue :
기본 키 값의 초기값을 지정합니다.
@GeneratedValue(strategy = GenerationType.SEQUENCE, initialValue = 1000)
4. allocationSize :
데이터 베이스에서 한 번에 할당하는 기본 키 값의 범위를 지정합니다.
@GeneratedValue(strategy = GenerationType.SEQUENCE, allocationSize = 50)
ColumnDefinition
엔티티 클래스의 필드를 데이터베이스 테이블의 colum에 mapping할때 해당 컬럼의 데이터 타입 및 다양한 속성을 지정하는데 사용된다.
1. VARCHAR (문자열 데이터 타입) :
@Column(columnDefinition = "VARCHAR(255)")
private String name;
2. TEXT (문자열 데이터 타입) :
@Column(columnDefinition = "TEXT")
private String description
3. INT, BIGINT (숫자형 데이터 타입) :
@Column(columnDefinition = "INT")
private int quantity;
4. DOUBLE, FLOAT (부동 소수점 데이터 타입) :
@Column(columnDefinition = "DOUBLE")
private double price;
5. 날짜 및 시간 데이터 타입 :
@Column(columnDefinition = "DATE")
private LocalDate date;
@Column(columnDefinition = "TIMESTAMP")
private LocalDateTime timestamp;
6. UNIQUE (중복 불가) :
@Column(columnDefinition = "VARCHAR(50) UNIQUE")
private String email;
Casecade
현제 엔티티의 상태 변화가 연관된 다른 엔티티에 어떤 영향을 미칠지 지정하는 데 사용한다.
- CascadeType.ALL:
- 부모 엔티티의 모든 상태 변경에 대해 자식 엔티티에 적용된다. (영속화, 수정, 삭제 등)
- CascadeType.PERSIST:
- 부모 엔티티가 영속화될 때 자식 엔티티에도 영속화가 적용된다.
- CascadeType.MERGE:
- 부모 엔티티가 병합될 때 자식 엔티티에도 병합이 적용된다.
- CascadeType.REMOVE:
- 부모 엔티티가 삭제될 때 자식 엔티티도 삭제가 적용된다.
- CascadeType.REFRESH:
- 부모 엔티티가 리프레시될 때 자식 엔티티에도 리프레시가 적용된다.
- CascadeType.DETACH:
- 부모 엔티티가 detach될 때 자식 엔티티에도 detach가 적용된다.
728x90
반응형
'Spring > Spring 기초' 카테고리의 다른 글
[Spring/기초] TDD (0) | 2024.01.21 |
---|---|
[Spring/기초] spring MVC (0) | 2024.01.21 |
[Spring/기초] Spring boot Mysql 연결 (0) | 2024.01.20 |
[Spring/기초] Spring boot 기본 폴더 구조 설명 (0) | 2024.01.19 |
[Spring/기초] Controller Vs RestController (0) | 2024.01.19 |
@코딩하는 자연대생 :: 자연대생도 코딩을 하고 싶어
Coding, Software, Computer Science 내가 공부한 것들 잘 이해했는지, 설명할 수 있는지 적는 공간