WEB/JPA

3. ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘

๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ๋งคํ•‘

@Entity

- @Entity๊ฐ€ ์ •์˜๋˜์–ด์žˆ๋Š” ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค.

- ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ๊ผญ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

- ์†์„ฑ: name ->JPA์— ์‚ฌ์šฉํ•  ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค, ๊ธฐ๋ณธ๊ฐ’ : ํด๋ž˜์Šค ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ

 

@Table

- name, catalog, schema ๋“ฑ๋“ฑ. . 

 

ํ•„๋“œ์™€ ์ปฌ๋Ÿผ ๋งคํ•‘

@Column

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปฌ๋Ÿผ๋ช…์„ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

unique(์‹ค๋ฌด์—์„œ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค -> ์œ ๋‹ˆํฌ ์ œ์•ฝ์กฐ๊ฑด ์ด๋ฆ„์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋‹ค ๋Œ€์‹  @Table(uniqueCons.. ์‚ฌ์šฉ), length ๋“ฑ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. 

JPA ๊ธฐ๋ณธ - ๊น€์˜ํ•œ / ์ธํ”„๋Ÿฐ

@Temporal

๋‚ ์งœ ํƒ€์ž… ๋งคํ•‘

ํ•˜์ง€๋งŒ LocalDate, LocalDateTime์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ƒ๋žต ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

@Enumerated

enum ํƒ€์ž… ๋งคํ•‘

default๊ฐ€ ORDINAL ์ธ๋ฐ enum ์ˆœ์„œ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•œ๋‹ค ( ์‚ฌ์šฉX -> ์ˆœ์„œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์ด์ „ ๋ฐ์ดํ„ฐ๋Š” ๋ณ€๊ฒฝ์ด ์•ˆ๋˜์–ด์„œ ๋ฌธ์ œ ๋ฐœ์ƒ )

EnumType.STRING ์€ enum ์ด๋ฆ„์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•œ๋‹ค (์ด๊ฒƒ์„ ์‚ฌ์šฉ)

 

@Lob

BLOB, CLOB ๋งคํ•‘

 

 

@Transient

ํŠน์ • ํ•„๋“œ๋ฅผ ์ปฌ๋Ÿผ์— ๋งคํ•‘ํ•˜์ง€ ์•Š์Œ (๋งคํ•‘ ๋ฌด์‹œ)

๋ฉ”๋ชจ๋ฆฌ์ƒ ๋กœ์ง์—๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

๊ธฐ๋ณธ ํ‚ค ๋งคํ•‘

@Id

- ์ง์ ‘ ํ• ๋‹นํ•  ๊ฒฝ์šฐ @Id 

- ์ž๋™ ์ƒ์„ฑ์‹œ (@GeneratedValue) ์ถ”๊ฐ€ํ•œ๋‹ค.

- strategy = GenerationType.AUTO  - ๋ฐฉ์–ธ์— ๋”ฐ๋ผ ์ž๋™ ์ง€์ •, ๊ธฐ๋ณธ๊ฐ’

- strategy = GenerationType.IDENTITY - ๊ธฐ๋ณธ ํ‚ค ์ƒ์„ฑ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ„์ž„ํ•œ๋‹ค. (MYSQL)

 DB์— insert๋ฅผ ํ•ด๋ด์•ผ id๊ฐ’์„ ์•Œ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์˜ˆ์™ธ์ ์œผ๋กœ persist ํ•  ๋•Œ ๋ฐ”๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฐ๋‹ค. ( ์›๋ž˜๋Š” ํŠธ๋žœ์ ์…˜์‹œ์— ์ฟผ๋ฆฌ๊ฐ€ ๋‚ ๋ผ๊ฐ ) -> id ๊ฐ’ ์•Œ ์ˆ˜ ์žˆ์Œ

- strategy = GenerationType.SEQUENCE - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ€€์Šค ์˜ค๋ธŒ์ ํŠธ ์‚ฌ์šฉ @SequenceGenerator ํ•„์š” (ORACLE)

- strategy = GenerationType.TABLE - ํ‚ค ์ƒ์„ฑ์šฉ ํ…Œ์ด๋ธ” ์‚ฌ์šฉ @TableGenerator ํ•„์š” (๋ชจ๋“  DB) -> ์„ฑ๋Šฅ์ด ๋ณ„๋กœ...

 

-> ๊ถŒ์žฅํ•˜๋Š” ์‹๋ณ„์ž ์ „๋žต 

- ๊ธฐ๋ณธ ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด : null X, ์œ ์ผ, ๋ณ€ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

- ๋ฏธ๋ž˜๊นŒ์ง€ ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ž์—ฐํ‚ค๋Š” ์ฐพ๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๋ฆฌํ‚ค(๋Œ€์ฒดํ‚ค)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

   ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ๋„ ๊ธฐ๋ณธ ํ‚ค๋กœ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค. 

   ๊ถŒ์žฅ : Longํ˜• + ๋Œ€์ฒดํ‚ค + ํ‚ค ์ƒ์„ฑ์ „๋žต ์‚ฌ์šฉ

   ๋•Œ์— ๋”ฐ๋ผ ๋žœ๋ค๊ฐ’, UUID ๋ฅผ ๊ถŒ์žฅ

 

์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ : @ManyToONe, @JoinColumm ๋“ฑ

 

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ž๋™ ์ƒ์„ฑ

DDL์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ์ ์— ์ž๋™ ์ƒ์„ฑ

ํ…Œ์ด๋ธ” ์ค‘์‹ฌ์—์„œ -> ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ

๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๋ฐฉ์–ธ์„ ํ™œ์šฉํ•˜์—ฌ ์ ์ ˆํ•˜๊ฒŒ DDL์„ ์ƒ์„ฑํ•œ๋‹ค

์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ DDL์€ ๊ฐœ๋ฐœ์„œ๋ฒ„์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ๋‹ค๋“ฌ์–ด์„œ ์šด์˜์—์„œ ์‚ฌ์šฉํ•˜์ž.

 

create > ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ์ƒ์„ฑ

create-drop > ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ์ƒ์„ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ์‹œ ํ…Œ์ด๋ธ” ์‚ญ์ œ

update > ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ˆ˜์ • (alter) , ์ถ”๊ฐ€ํ•˜๋Š”๊ฒƒ ๋งŒ ๊ฐ€๋Šฅ

validate  > ์—”ํ‹ฐํ‹ฐ์™€ ํ…Œ์ด๋ธ”์ด ์ •์ƒ๋งคํ•‘๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์ค€๋‹ค.

none > ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

 

์šด์˜ ์žฅ๋น„์—๋Š” ์ ˆ๋Œ€ create, create-drop, update ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

๊ฐœ๋ฐœ ์ดˆ๊ธฐ -> create or update

ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ -> update or validate

์Šคํ…Œ์ด์ง•๊ณผ ์šด์˜ ์„œ๋ฒ„ -> validate or none

 

--> ๋กœ์ปฌPC ์™ธ์—๋Š” none or validate ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ํ…Œ์ด๋ธ” ์ˆ˜์ •์€ ์ง์ ‘ํ•œ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•