[JPA] Entity Mapping : ๊ฐ์ฒด โก๏ธ ํ ์ด๋ธ ๋งคํ
by rlaehddnd0422JPA๋ฅผ ์ฌ์ฉํ ๋ ์ฐ์ ์ ์ผ๋ก ํด์ผ ํ ์ผ์ ๋ฐ๋ก ์ํฐํฐ์ ํ ์ด๋ธ์ ๋งคํํ๋ ์์ ์ ๋๋ค. JPA๋ ์ํฐํฐ์ ํ ์ด๋ธ์ ๋งคํํ๊ธฐ ์ํ ๋ค์ํ ๋งคํ ์ด๋ ธํ ์ด์ ์ ์ง์ํฉ๋๋ค.
1. ๊ฐ์ฒด์ ํ ์ด๋ธ์ ๋งคํํ ๋ : @Entity, @Table
2. ํ ์ด๋ธ์์ ์ฌ์ฉํ ๊ธฐ๋ณธ ํค๋ฅผ ๋งคํํ ๋ : @Id
3. ๊ฐ์ฒด์ ํ๋์ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๋งคํํ ๋ : @Column
4. ํ ์ด๋ธ๊ณผ ํ ์ด๋ธ๊ฐ ์ฐ๊ด๊ด๊ณ ๋งคํ : @ManyToOne, @JoinColumn ๋ฑ..
์ด๋ฒ ํฌ์คํ ์์๋ ์ด๋ ธํ ์ด์ ์ ํตํด Entity์ ํ ์ด๋ธ์ ๋งคํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ํ๋์ฉ ์์๋ณด๊ฒ ์ต๋๋ค.
(์ฐ๊ด๊ด๊ณ ๋งคํ์ ๋ค์ ํฌ์คํ ์์)
๊ฐ์ฒด์ ํ ์ด๋ธ ๋งคํ
@Entity
JPA๋ฅผ ์ฌ์ฉํด์ ํ ์ด๋ธ๊ณผ ๋งคํํ ํด๋์ค๋ @Entity ์ด๋ ธํ ์ด์ ์ ํ์์ ์ผ๋ก ๋ถ์ฌ์ฃผ์ด์ผ ํฉ๋๋ค.
์ฃผ์ํ ์ : JPA๊ฐ ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก @Entity ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ ๋ฐ๋์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ค์ด ์ฃผ์ด์ผ ํฉ๋๋ค. ์๋ฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์์ฑํ์ง ์์๋ ์๋์ผ๋ก ์์ฑํด ์ฃผ์ง๋ง, ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์๋ ๋ค๋ฅธ ์์ฑ์๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์๋์ผ๋ก ๋ง๋ค์ด ์ง์ง ์๊ธฐ ๋๋ฌธ์, ๋ช ์์ ์ผ๋ก ๋ง๋ค์ด ์ฃผ์ด์ผ ํฉ๋๋ค.
์์
@Entity
public class Member {
@Id
private Long id;
private String name;
public Member(){}
}
@Table
์ํฐํฐ์ ๋งคํํ ํ ์ด๋ธ์ ์ง์ ํด์ฃผ๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค. ex) @Table(name="ํ ์ด๋ธ๋ช ")
์ด ์ด๋ ธํ ์ด์ ์ ์๋ตํ๊ฒ ๋๋ฉด JPA๋ ์๋์ผ๋ก ํด๋์ค ์ด๋ฆ์ ํ ์ด๋ธ๋ช ์ผ๋ก ๋งคํํฉ๋๋ค.
์ฌ์ฉ ์์
@Entity
@Table(name="MEMBERK")
public class Member {
@Id
private Long id;
private String name;
public Member(){}
}
์๋์ผ๋ก ์ง์ ํด์ฃผ๊ฒ ๋๋ฉด @Entity๋ก ๋งคํ๋ ํด๋์ค๋ฅผ ์ง์ ํ ํ ์ด๋ธ๋ช ์ผ๋ก ๋งคํํด์ค๋๋ค.
name ์ธ์๋ @Table์ ์ง์ ํ ์ ์๋ ๋ค์ํ ์์ฑ์ด ์์ต๋๋ค.
- catalog : ์นดํ๋ก๊ทธ ๊ธฐ๋ฅ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ catalog๋ฅผ ๋งคํ
- schema : ์คํค๋ง ๊ธฐ๋ฅ์ด ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ schema๋ฅผ ๋งคํ
- uniqueConstraints : DDL ์์ฑ ์์ ์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด ์์ฑ. 2๊ฐ ์ด์์ ๋ณตํฉ ์ ๋ํฌ ์ ์ฝ ์กฐ๊ฑด๋ ๊ฐ๋ฅ! ์คํค๋ง ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํด์ DDL์ ๋ง๋ค ๋๋ง ์ฌ์ฉ๋ฉ๋๋ค.
uniqueConstraints ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ๋ DDL ์์ฑ ๊ธฐ๋ฅ์ ์กฐ๊ธ ๋ค์ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ์๋์์ฑ
JPA๋ ํด๋์ค์ ๋งคํ ์ ๋ณด๋ฅผ ๋ณด๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ด ์๋์ผ๋ก ์์ฑ๋๋ฏ๋ก ๊ฐ๋ฐ์๊ฐ ์ผ์ผํ ํ ์ด๋ธ์ ์์ฑํด์ฃผ์ด์ผ ํ๋ ์์ ๋ค์ ์๋ตํ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด persistence.xml์ ๋ค์ ์์ฑ์ ์ถ๊ฐํด์ฃผ๋ฉด ๋ฉ๋๋ค.
<property name="hibernate.hbm2ddl.auto" value="create" />
value ์์ฑ
- create : ๊ธฐ์กด ํ ์ด๋ธ์ ์ญ์ ํ๊ณ ์๋ก ์์ฑ (drop & create)
- create-drop : ๊ธฐ์กด ํ ์ด๋ธ์ ์ญ์ ํ๊ณ ์๋ก ์์ฑํ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ ์ ๋ค์ ํ ์ด๋ธ์ dropํ๋ ๋ฐฉ์ (drop + create + drop)
- update : ํ ์ด๋ธ์ ๋ณ๊ฒฝ์ฌํญ๋ง Update
- validate : ์ํฐํฐ์ ํ ์ด๋ธ์ ์ฐจ์ด๊ฐ ์์ผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋จ๊ธฐ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์คํํ์ง ์์.
- none : ์๋ ์์ฑ๊ธฐ๋ฅ off
People ์ํฐํฐ๋ฅผ ๋ง๋ค๊ณ ํ ์คํธ๋ฅผ ํด๋ณด์์ต๋๋ค.
@Entity
@Table(name = "PEOPLE")
public class People {
@Id
@Column(name = "id")
private String id;
@Column(name = "name")
private String username;
private Integer age;
@Enumerated
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
public People() {
}
}
log๋ฅผ ๋ณด๋ฉด ํ ์ด๋ธ ์์ฑ์ ๋ณด๋ฅผ ์ ์ ์์ต๋๋ค.
Hibernate:
create table PEOPLE (
id varchar(255) not null,
age integer,
createdDate timestamp,
description clob,
lastModifiedDate timestamp,
roleType integer,
name varchar(255),
primary key (id)
)
์ง์ ๋ง๋ ์ํฐํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์คํค๋ง๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ํฐํฐ์ ํ ์ด๋ธ์ ์ด๋ป๊ฒ ๋งคํํด์ผ ํ๋์ง ์๋ ค์ฃผ๋ ๋๊ตฌ๋ก ๊ฐ๋ฐ ์๋ฒ์์๋ง ์ฌ์ฉํ๊ณ ์ด์ ์๋ฒ์์๋ ์ฌ์ฉํ์ง ์๋๋ก ํฉ์๋ค.
<์ฐธ๊ณ ์๋ฃ>
'๐ Backend > Spring Data JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] ์ฐ๊ด๊ด๊ณ ๋งคํ - ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ (1) | 2023.04.30 |
---|---|
[JPA] ์ฐ๊ด๊ด๊ณ ๋งคํ - ๋จ๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ (0) | 2023.04.29 |
[JPA] Entity Mapping : ํ๋ โก๏ธ ์ปฌ๋ผ ๋งคํ (0) | 2023.04.28 |
[JPA] Entity Mapping : ๊ธฐ๋ณธ ํค(PK) ๋งคํ (0) | 2023.04.27 |
[JPA] ์์์ฑ ์ปจํ ์คํธ์ ์ํฐํฐ (0) | 2023.04.27 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422