JPA - Entity ์์ฑ์ ์ํ ์ด๋
ธํ
์ด์
2023. 11. 15. 23:21ใ๋ฐฑ์๋/Spring Boot
๐ง Entity๋ฅผ ์์ฑํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ ์ด๋ ธํ ์ด์ ์ ๋ํ์ฌ ์์๋ณด์.
1. @Entity
- ์์ฑํ ํด๋์ค๋ฅผ JPA Entity๋ก ์ง์ ํ๋ ์ญํ ๋ก ๊ฐ์ฒด์ DB ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ค.
- ๊ธฐ๋ณธ ์์ฑ์(ํ๋ผ๋ฏธํฐ๊ฐ ์๋ ์์ฑ์)๋ฅผ ํ์๋ก ๊ฐ์ ธ์ผ ํ๋ค.
(๋ช ์์ ์ผ๋ก ์ ์ธํ์ง ์์ ๊ฒฝ์ฐ ์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์์ฑ)
@Entity
public class Player {
// filed or method
// ๊ธฐ๋ณธ ์์ฑ์
public Player() {
// ๋ด์ฉ
}
}
2. @Table
- Entity์ ๋งคํ๋๋ ํ ์ด๋ธ์ ์์ฑ(ํ ์ด๋ธ ์ด๋ฆ, ์นดํ๋ก๊ทธ ์คํค๋ง ๋ฑ..)์ ์ง์ ํ ์ ์๋ค.
- ํด๋น ์ด๋ ธํ ์ด์ ์ ์ถ๊ฐํ์ง ์๋๋ค๋ฉด ๋งคํํ ์ํฐํฐ ์ด๋ฆ์ ํ ์ด๋ธ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ค.
@Entity
@Table(name = "player_info")
public class Player {
// filed or method
// ๊ธฐ๋ณธ ์์ฑ์
public Player() {
// ๋ด์ฉ
}
}
3. @Id , @GeneratedValuee
- @Id : ํ๋ ์์ ์ ์ธํ๋ฉฐ ์ํฐํฐ์ ๊ธฐ๋ณธ ํค(PK)๋ฅผ ์๋ฏธํ๋ค.
- @GeneratedValue : ๊ธฐ๋ณธ ํค์ ๊ฐ์ ์๋์ผ๋ก ์์ฑํ ๋ ์ฌ์ฉํ๋ค.
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
4. @Column
- ์ํฐํฐ์ ํ๋์ DB ํ ์ด๋ธ์ ์ปฌ๋ผ ๊ฐ ๋งคํ์ ์ง์ ํ๋ค.
- ์ด๋ฆ, ๊ธธ์ด, null ํ์ฉ ์ฌ๋ถ๋ฑ์ ์ค์ ํ ์ ์๋ค.
โ๏ธ ์์ฑ ์ข ๋ฅ
- name : DB ํ ์ด๋ธ์ ์ปฌ๋ผ ์ด๋ฆ์ ์ง์ , ๊ธฐ๋ณธ๊ฐ์ ํ๋๋ช
- length : ์ฃผ๋ก String ํ์ ํ๋์ ์ฌ์ฉ๋๋ฉฐ ๋ฌธ์์ด ์ปฌ๋ผ์ ๊ธธ์ด๋ฅผ ์ง์
- nullable : true, false๋ก ํ์ฉ ์ฌ๋ถ๋ฅผ ์ค์
- unique : true, false๋ก ํด๋น ์ปฌ๋ผ์ ๊ฐ์ด ๊ณ ์ ํด์ผ ํ๋์ง๋ฅผ ๋ํ๋งค๋ฉฐ ์ค๋ณต ๊ฐ์ด ํ์ฉ๋์ง ์์
- columnDefinition : ์ปฌ๋ผ์ ์ ์๋ฅผ ์ง์ ํ ๋ ์ฌ์ฉ
@Column(name = "your_column", length = 50, nullable = false)
private String yourField;
5. @Enumerated
- Enum ํ์ ํ๋๋ฅผ ๋งคํํ ๋ ์ฌ์ฉํ๋ค.
โ๏ธ ์์ฑ ์ข ๋ฅ
- EnumType.ORDINAL : Enum ์์์ ์์๋ฅผ ์ ์ฅ
- EnumType.STRING : ์์์ ์ด๋ฆ์ ๋ฌธ์์ด๋ก ์ ์ฅ
@Entity
public class Player {
// Enum ํ์
ํ๋ ๋งคํ
@Enumerated(EnumType.STRING)
private YourEnumType yourEnumField;
}
6. @Temporal
- ๋ ์ง ๋ฐ ์๊ฐ ํ๋๋ฅผ ๋งคํํ ๋ ์ฌ์ฉํ๋ค.
- ๋ ์ง์ ์๊ฐ ์ ๋ณด๋ฅผ DB์ ์ด๋ป๊ฒ ์ ์ฅํ๊ณ ๊ฐ์ ธ์ฌ์ง ์ง์ ํ๋ค.
โ๏ธ ์์ฑ ์ข ๋ฅ
- TemporalType.DATE : ๋ ์ง ์ ๋ณด๋ง ์ ์ฅ
- TemporalType.TIME : ์๊ฐ ์ ๋ณด๋ง ์ ์ฅ
- TemporalType.TIMESTAMP : ๋ ์ง ๋ฐ ์๊ฐ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ ์ฅ
@Entity
public class YourEntity {
// java.util.Date ํ์
์ ํ๋ ๋งคํ
@Temporal(TemporalType.DATE)
private Date dateField;
}
7. ๊ด๊ณ ๋งคํ์ ์ํ ์ด๋ ธํ ์ด์
- @OneToMany, @ManyToOne, @ManyToMany, @OneToOne
// ์ผ๋๋ค ๊ด๊ณ
@OneToMany(mappedBy = "product")
private List<Review> reviews;
// ๋ค๋์ผ ๊ด๊ณ
@ManyToOne
@JoinColumn(name = "category_id")
private Category category;
// ๋ค๋๋ค ๊ด๊ณ
@ManyToMany
@JoinTable(
name = "product_tag",
joinColumns = @JoinColumn(name = "product_id"),
inverseJoinColumns = @JoinColumn(name = "tag_id")
)
private List<Tag> tags;
// ์ผ๋์ผ ๊ด๊ณ
@OneToOne
@JoinColumn(name = "detail_id")
private ProductDetail productDetail;'๋ฐฑ์๋ > Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| JWT๋ฅผ ์ ์ฉํ ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ (4) | 2024.01.03 |
|---|---|
| DTO โ Entity ๋ณํํ๊ธฐ (1) | 2023.11.16 |
| JPA : Java Persistence API (1) | 2023.11.15 |
| Entity vs DTO vs VO ๊ฐ๋ ๊ณผ ํน์ง (1) | 2023.11.08 |
| Controller,Service,Repository์์์ DI (0) | 2023.11.05 |