์ํฐํฐ๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด,
ํ๋์ @Column์ ๋ถ์ด๋ ์ฝ๋๋ฅผ ๋ณด๊ฒ ๋๋ค.
๋์น๋ก ๋์ถฉ ์ด๋ค ๋๋์ธ์ง ์์ง๋ง
๊ทธ๋๋ ์ ํํ ์๊ณ ๋์ด๊ฐ๋ณด์.
@Column
- ๊ฐ์ฒด์ ํ๋๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์ปฌ๋ผ์ ์ด๋ป๊ฒ ๋งคํํ ์ง ์ ์ํ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
- ์๋ฐ ๋ณ์๋ช ๊ณผ DB ์ปฌ๋ผ๋ช ์ด ๋ค๋ฅผ ๋, ์ปฌ๋ผ์ ์ ์ฝ์กฐ๊ฑด(๊ธธ์ด, NULL ์ฌ๋ถ ๋ฑ)์ ๊ฑธ๊ณ ์ถ์ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
@Column์ ์์ฑ
- name
: ๋งคํํ ํ ์ด๋ธ์ ์ปฌ๋ผ ์ด๋ฆ์ ์ง์ ํ๋ค. - nullable
: false๋ก ์ค์ ํ๋ฉด DDL ์์ฑ ์ NOT NULL ์ ์ฝ์กฐ๊ฑด์ด ๋ถ๋๋ค. - unique
: ํ ์ปฌ๋ผ์ ๊ฐ๋จํ ์ ๋ํฌ ์ ์ฝ์กฐ๊ฑด์ ๊ฑธ ๋ ์ฌ์ฉํ๋ค. - length
: ๋ฌธ์์ด(String) ํ์ ์ ๊ธธ์ด๋ฅผ ์ง์ ํ๋ค. (Varchar์ ๊ธธ์ด) - insertable
: false๋ก ์ค์ ํ๋ฉด ์ํฐํฐ ์ ์ฅํ ๋ ์ด ํ๋๋ DB์ ์ ์ฅ๋์ง ์๋๋ค. - updatable
: false๋ก ์ค์ ํ๋ฉด ์ํฐํฐ ์์ ํ ๋ ์ด ํ๋๋ DB์ ๋ฐ์๋์ง ์๋๋ค. - columnDefinition
: DB ์ปฌ๋ผ ์ ๋ณด๋ฅผ ์ง์ ์ ๋๋ค. → VARCHAR(100) DEFAULT 'EMPTY' ๋ฑ... - precision / scale
: precision์ ์์์ ์ ํฌํจํ ์ ์ฒด ์๋ฆฟ์๋ฅผ ์ง์ ํ๊ณ scale์ ์์์ ์๋ฆฟ์๋ฅผ ์ง์ ํ๋ค. BigDecimal ํ์ ์์ ์ฌ์ฉํ๋ค.
โป ์ฃผ์ โป
๋ง์ฝ SQL ๊ตฌ๋ฌธ์ผ๋ก ์์ฑ์ ์ง์ ํ๋ค๊ณ ํด๋ณด์. ๊ทธ ์ค A ์นผ๋ผ์ null์ ํ์ฉํ ์ํ๋ผ๋ฉด, ์๋ฐ ์ฝ๋์์ @Column(nullable = false)๋ผ๊ณ ์ ์ด๋ ์ปฌ๋ผ์ ์ง์ ํ ์์ฑ์ ๋ฐ๋์ง ์์ ๊ฒ์ด๋ค.
@Column์ ์ฝ๋ ์์
@Entity
public class User {
@Id @GeneratedValue
private Long id;
// ์ปฌ๋ผ๋ช
์ username์ผ๋ก ์ง์ ํจ
// null์ ํ์ฉํ์ง ์์ -> ๊ฐ์ ๋ฌด์กฐ๊ฑด ๋ฃ์ด์ผํจ
// ๊ธธ์ด๋ 20์ ์ ํ
@Column(name = "username", nullable = false, length = 20)
private String name;
// ์์ ๋ถ๊ฐํ๋๋ก ํจ (์
๋ฐ์ดํธ ์์ํด)
// ์ด๋ค ์ ๋ณด๋ฅผ ๋ณดํธํ ๋ ์ฌ์ฉํจ
@Column(updatable = false)
private LocalDateTime createdAt;
// ํน์ DB ์ ์ฉ ๊ตฌ๋ฌธ์ ์ง์ ๋ฃ๊ณ ์ถ์ ๋
@Column(columnDefinition = "TEXT")
private String description;
}
JPA๊ฐ JAVA์ ๋ฐ์ดํฐ ํ์
์ ๋ณด๊ณ DB๋ฅผ ๋ง๋ค ๋ ์ด๋ป๊ฒ ๋ค๋ฅธ๊ฐ?
- @Column ์๋ต, ์๋ฐ ๊ธฐ๋ณธ ํ์ (int)
int data1;
↓
์์ฑ๋๋ DDL
data1 integer **not null**
์๋ฐ์ int๋ ์์ํ์ ์ด๋ผ์ ์ ์ด์ null์ ๋ด์ ์ ์๋ค. ๊ทธ๋์ JPA๋ int๋ฅผ ๋ณด๊ณ null์ด ๋ค์ด์ค๋ฉด ์๋๋ค๊ณ ํ๋จํ์ฌ ์๋์ผ๋ก not null์ด๋ผ๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ถ์ฌ์ค๋ค.
- @Column ์๋ต, ์๋ฐ ๊ฐ์ฒด ํ์ (Integer)
Integer data2;
↓
data2 integer
Integer์ ๊ฐ์ฒด ํ์ ์ด๋ผ null์ด ๊ฐ๋ฅํ๋ค. JPA๋ Integer๋ฅผ ๋ณด๊ณ null์ ํ์ฉ ์ํ๋ก ๋ง๋ ๋ค.
- @Column ์ฌ์ฉ, ์๋ฐ ๊ธฐ๋ณธ ํ์ (int)
@Column
int data1;
↓
data3 integer
๋ถ๋ช int data1;๋ง ๋ณด๋ฉด ์ฒซ๋ฒ์งธ ์์์ฒ๋ผ not null์ด ๋ถ์ด์ผํ๋ค. ๊ทธ๋ฌ๋ ์์๊ณผ ๋ค๋ฅด๊ฒ ๋ถ์ง ์์๋ค. ๊ทธ ์ด์ ๋ @Column ์ด๋ ธํ ์ด์ ์ ๊ธฐ๋ณธ๊ฐ ๋๋ฌธ์ด๋ค. @Column์ nullable ์์ฑ์ ๊ธฐ๋ณธ๊ฐ์ true์ด๋ค. ์ด๋ ธํ ์ด์ ์ ๋ถ์ด๋ฉด JPA๋ ๊ธฐ๋ณธ๊ฐ์ธ nullable = true๋ฅผ ์ ์ฉํ๋ค.
Q. DML๊ณผ DDL์ ์ฐจ์ด๋?
A. DML์ Data Manipulation Language๋ก SELECT, INSERT, UPDATE์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ๋ ์ด๋ค. ์์ ๋ด์ฉ๋ฌผ์ ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ๋ค๊ณ ์ดํดํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. DDL์ Data Definition Language๋ก CREATE, ALTER, DROP์ฒ๋ผ ํ ์ด๋ธ ์์ฒด๋ฅผ ๋ง๋ค๊ฑฐ๋ ์์ ํ ๋ ์ฌ์ฉํ๋ค. ๋ด์ฉ๋ฌผ์ ๋ฃ๋ ๊ทธ๋ฆ์ ๊ด๋ฆฌํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
Q. ์ธ์ int๋ฅผ ์ฌ์ฉํ๊ณ , Integer๋ฅผ ์ฌ์ฉํ ๊น?
A. int, long, boolean์ ์์ํ์ ์ด๋ผ๊ณ ๋งํ๋ค. ์์ ํ์ ์ ์ค์ ๋ฐ์ดํฐ ๊ฐ ๊ทธ ์์ฒด์ด๋ค. Integer, Long, Boolean์ ๊ฐ์ฒด ํ์ ์ด๋ผ๊ณ ๋งํ๋ค. ๊ฐ์ฒด ํ์ ์ ๊ฐ์ฒด(๋ฉ๋ชจ๋ฆฌ ์ฃผ์)๋ฅผ ์ฐธ์กฐํ๋ค. ์ฃผ๋ก ๊ฐ ํ์ ์ด ๊ฐ๊ณ ์๋ ํน์ง์ ๋ง์ถฐ ๋ง๋ ํ์ ์ ์ฌ์ฉํด์ผํ๋ค.
๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ฐํ๋ฉด ๊ฐ์ฒด ํ์ ์ด ํจ์ฌ ๋ฌด๊ฒ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ๊ฒ ์ ์ง๋๊ณ ์ถ์ผ๋ฉด ์์ ํ์ ์ ์ฌ์ฉํ๊ณ , ๋ฌด์กฐ๊ฑด ๋ฐ์ดํฐ ๊ฐ์ด ์์ดํ ํ๋ ๊ฒฝ์ฐ ์์ ํ์ ์ ์ฌ์ฉํ๋ค.
Optional ๋ฐ์ดํฐ์ธ ๊ฒฝ์ฐ ๊ฐ์ฒด ํ์ ์ ์ฌ์ฉํ๋ค. Optional์ ์ฃผ๋ก ๊ทธ ๊ฐ์ด ์์ ์๋ ์๊ณ ์์ ์๋ ์์ ๋ ๋ถ์ธ๋ค. ์์๋ก ํ์๊ฐ์ ์ ์ด๋ฉ์ผ์ ์ ํ ํญ๋ชฉ์ผ๋ก ์ ์๋ค๊ณ ๊ฐ์ ํ์. ๊ทธ๋ฌ๋ฉด ์ ์ฅ๋ DB์๋ ์ฌ์ฉ์๋ง๋ค ๊ฐ์ด ๋ค์ด์์ ์ ์๊ณ ์๋ ์ ์๋ค. ์ฌ์ฉ์๊ฐ ํ์ ์ ๋ณด ํ์ด์ง์ ๋ค์ด๊ฐ์ ๋ณธ์ธ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ฌ ๋, ์๋ฒ๋ ์ด๋ฉ์ผ์ Optional๋ก ๋ถ๋ฌ์ค๊ฒ ๋๋ค. ๊ฐ์ด ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํจ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ฐ์ List๋ Map ๊ฐ์ ์ปฌ๋ ์ ์ด๋ ์ ๋๋ฆญ์ ์ฌ์ฉํ ๋ ๊ฐ์ฒด ํ์ ์ ์จ์ผํ๋ค. List<Integer>์ฒ๋ผ ๋ง์ด๋ค. ๊ทธ๋ฆฌ๊ณ DB๊ด๋ จ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด id(๊ธฐ๋ณธํค)์๋ ๊ผญ Long์ ์ด๋ค. ๊ทธ ์ด์ ๋ id๊ฐ 0์ธ ๊ฒ๊ณผ ์์ง ํ ๋น๋์ง ์์ null์ธ ์ํ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํจ๊ณผ ํจ์ฌ ํฐ ๋ฒ์๋ฅผ ๋ด๊ธฐ ์ํ ์ด์ ๊ฐ ์๋ค.
[JPA] ํ๋์ ์ปฌ๋ผ ๋งคํ - @Column
๐ง @Column @Column์ ๊ฐ์ฒด ํ๋๋ฅผ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๋งคํ์์ผ์ฃผ๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค. ์์ฑ ์์ฑ ๊ธฐ๋ฅ ๊ธฐ๋ณธ๊ฐ name ํ๋์ ๋งคํํ ํ ์ด๋ธ์ ์ปฌ๋ผ ์ด๋ฆ์ ์ง์ ํ๋ค. ๊ฐ์ฒด์ ํ๋ ์ด๋ฆ insertable (๊ฑฐ์ ์ฌ
ttl-blog.tistory.com