๐ก ๊ฐ์ฒด์ ํ ์ด๋ธ ๋งคํ
- ์ค์ ์ค๊ณ์ ์ธ ์ธก๋ฉด์ด ์ค์ํ๋ฐ ์ด๋ป๊ฒ ๋งคํํด์ ์ฐ๋์ง๊ฐ ์ค์ํ๋ค.
@Entity
- @Entity ๊ฐ ๋ถ์ ํด๋์ค๋ JPA ๊ฐ ๊ด๋ฆฌํ๋ค.
- JPA๋ฅผ ์ฌ์ฉํด์ ํ
์ด๋ธ๊ณผ ๋งคํํ ํด๋์ค๋ @Entity ๊ฐ ํ์์ด๋ค.
- ๊ธฐ๋ณธ ์์ฑ์๋ ํ์์ด๋ค.
- final ํด๋์ค. enum, interface, inner ํด๋์ค ์ฌ์ฉ์ด ๋ถ๊ฐํ๋ค.
- ์ ์ฅํ ํ๋์ final์ ์ฌ์ฉํ ์ ์๋ค.
@Table
- ์ํฐํฐ์ ๋งคํํ ํ ์ด๋ธ์ ์ง์ ํ ์ ์๋ค.
- ์์ฑ
- name : ๋งคํํ ํ ์ด๋ธ ์ด๋ฆ
- schema : ๋ฐ์ดํฐ๋ฒ ์ด์ค schema ๋งคํ
๐ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ์๋ ์์ฑ
<property name="hibernate.hbm2ddl.auto" value="create" />
- ์์์ ๊ฐ์ด xml ํ์ผ์์๋ ์ค์ ์ด ๊ฐ๋ฅํ๋ค.
- JPA๋ ์ ํ๋ฆฌ์ผ์ด์
๋ก๋ฉ ์์ ์ DB ํ
์ด๋ธ์ ์์ฑํ๋ ๊ธฐ๋ฅ๋ ์ง์ํด ์ค๋ค.
- ์ค๋ฌด์์๋ ์ฌ์ฉํ์ง ์๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฉ์ธ์ ํ์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๋ ์ ์ ํ DDL์ ์์ฑ
- ์์ฑ
- hibernate.hbm2 ddl.auto
- create : ๊ธฐ์กด ํ ์ด๋ธ์ ์ญ์ ํ๊ณ ๋ค์ ์์ฑํ๋ค. (DROP + CREATE)
- create-drop: create์ ๊ฐ์ง๋ง ์ข ๋ฃ์์ ์ ํ ์ด๋ธ์ drop ํ๋ค.
- update : ๋ณ๊ฒฝ๋ฌธ๋ง ๋ฐ์ํ๋ค.
- validate : ์ํฐํฐ์ ํ ์ด๋ธ์ด ์ ์ ๋งคํ๋์๋์ง๋ง ํ์ธํ๋ค.
- none : ์ฌ์ฉํ์ง ์๋๋ค.
- ์ด์์ฅ๋น์๋ ์ ๋ create, create-drop, update ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
- hibernate.hbm2 ddl.auto
๐ก ํ๋์ ์ปฌ๋ผ ๋งคํ
@Entity
@Getter
@Setter
@AllArgsConstructor // ๋ชจ๋ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ์์ฑ์
@NoArgsConstructor // ๊ธฐ๋ณธ์์ฑ์
public class Member {
@Id
private Long id;// Pk๊ฐ ๋ญ์ง ์๋ ค์ค์ผํ๋ค.
@Column(name = "name") // ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปฌ๋ผ๋ช
์ ์ค์ ํด ์ค ์ ์๋ค.
private String name;
private int age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
}
@Enumerated
- ์๋ฐ Enum ํ์ ์ ๋งคํํ ๋ ์ฌ์ฉํ๋ค.
- ํ์
- EnumType.ORDINAL : Enum ์์๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.
- enum ํ์ ์ด ์ถ๊ฐ, ๋ณ๊ฒฝ, ์ญ์ ์ ์์๊ฐ ๋ฌ๋ผ์ง ๊ฒฝ์ฐ ์ฌ์ด๋ ์ดํํธ๊ฐ ์๊ธธ ์ ์๊ธฐ ๋๋ฌธ์ ORDINAL ํ์ ์ ์ง์ํ๋ ๊ฒ์ด ์ข๋ค.
- EnumType.STRING : Enum ์ด๋ฆ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.
- EnumType.ORDINAL : Enum ์์๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.
@Temporal
- ๋ ์ง ํ์ (Date, Calendar) ์ ๋งคํํ ๋ ์ฌ์ฉํ๋๋ฐ LocalDate , LocalDateTime ์ฌ์ฉ ์์๋ ์๋ต์ด ๊ฐ๋ฅํ๋ค.
@Column
- ์ ์ผ ๋ง์ด ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
- ์์ฑ
- name : ํ ์ด๋ธ์ ์ปฌ๋ผ ์ด๋ฆ์ ์ค์ ํ ์ ์๋ค.
- nullable : null ํ์ฉ ์ฌ๋ถ ๋ฅผ ์ค์ ํ ์ ์๋ค.
- false ์ not null ์กฐ๊ฑด์ด ๋ถ๋๋ค.
๐ก ๊ธฐ๋ณธ ํค ๋งคํ
- ์ฌ์ฉํ ์ ์๋ ์ด๋
ธํ
์ด์
- @Id ๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ ์ง์ ํ ๋น
- @GeneratedValue ์ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ ์๋์ผ๋ก ํ ๋น
- IDENTITY ์ ๋ต์ผ ๊ฒฝ์ฐ
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
- DB์ ๋ค์ด๊ฐ๋ด์ผ id ๊ฐ์ด ๋ฌด์์ธ์ง ์ ์ ์๋ค.
- ๋ฐ๋ผ์ ์ ์ฝ์ด ์๊ธฐ๋๋ฐ ์์ ์ํ๊ฐ ๋๋ ค๋ฉด pk ๊ฐ์ด ๋ฌด์กฐ๊ฑด ์์ด์ผ ํ๋ค.
- ๊ทธ๋์ ์ด ์ ๋ต์ ์ฌ์ฉํ ๊ฒฝ์ฐ em.persist ํ๋ ์์ ์ insert ์ฟผ๋ฆฌ๊ฐ ๋ ์๊ฐ๋ค.
- SEQUENCE ์ ๋ต์ผ ๊ฒฝ์ฐ
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MEMBER_SEQ_GENERATOR")
private Long id;
- ์ํ์ค๋ ์์ฐจ์ ์ผ๋ก ์ฆ๊ฐํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ฐํํด์ฃผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๋ฅผ ๋งํ๋ค.
- pk ๊ฐ์ ์ค๋ณต์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉํ๊ธฐ๋ ํ๋๋ฐ
- ๊ฒ์ํ์ ๊ธ ๋ฒํธ๋ฅผ ์์๋ก ๋ค ์ ์๋ค.
- ex) ๊ฒ์ํ์ ๊ธ ๋ฒํธ๋ฅผ ์๋์ผ๋ก + 1 ํด์ค ํ์์์ด ์๋์ผ๋ก ์ด๋ฃจ์ด์ ธ ํธ๋ฆฌํ๋ค.
- ๊ฒ์ํ์ ๊ธ ๋ฒํธ๋ฅผ ์์๋ก ๋ค ์ ์๋ค.
- ์ํ์ค ์ ๋ต
- ๋ฏธ๋ฆฌ ๊ฐ์ ์ฌ๋ ค๋๋ ๋ฐฉ์
- @SequenceGenerator : ์ํ์ค ์์ฑ๊ธฐ๋ฅผ ์ค์ ํ๋ ์ ๋ ธํ ์ด์

- call next value for MEMBER_SEQ
- member.getId() = 1
- DB์์ ๋จผ์ ์ํ์ค ๊ฐ์ ๊ฐ์ ธ์์ pk ๋ฅผ ์ธํ ํด์ค๋ค.
- allocationSize ๋ก ์ค์ ํด ์ค ๊ฒฝ์ฐ ๋ฏธ๋ฆฌ ์ค์ ๋ ๊ฐ์๋งํผ ๋น๊ฒจ์์ call next ~ ์์ด pk๋ฅผ ์ธํ
ํด ์ค ์ ์๋ค.
- ๋น๊ฒจ์จ ์ซ์ ์์์๋ DB ํธ์ถ ์์ด ๊ฐ์ ํ ๋นํด ์ฃผ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ ์ต์ ํ์ํฌ ์ ์๋ค.
- ๋์์ฑ ๋ฌธ์ ๊ฐ ์ผ์ด๋์ง ์๋๋ค.
- Table
- ํค ์์ฑ์ฉ ํ ์ด๋ธ ์ฌ์ฉ, ๋ชจ๋ DB์์ ์ฌ์ฉ
- ํค ์์ฑ ์ ์ฉ ํ ์ด๋ธ์ ํ๋ ๋ง๋ค์ด ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ํ์ค๋ฅผ ํ๋ด ๋ด๋ ์ ๋ต์ด๋ค.
- ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
- @TableGenerator ๊ฐ ํ์ํ๋ค.
@Entity
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnName = "MEMBER_SEQ", allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "MEMBER_SEQ_GENERATOR")
@Column(name = "MEMBER_ID")
private Long id;
...
}
<์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธ ํธ ์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์์ต๋๋ค.>
'JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Jpa] ๋ค๋์ผ[N:1], ์ผ๋๋ค[1:N] ์ ๋ํด์ (0) | 2023.05.09 |
|---|---|
| [Jpa] ์ฐ๊ด๊ด๊ณ ๋งคํ ๊ธฐ์ด (0) | 2023.05.01 |
| [Jpa] ์์์ฑ ์ปจํ ์คํธ (0) | 2023.04.27 |
| [Jpa] @OneTOOne์ ๋ํด์ (0) | 2023.04.26 |
| [Jpa] JPA ๋? (0) | 2023.04.25 |