Backend Language/JPA(Spring boot)

[JPA Spring boot] ์—ฐ๊ด€ ๊ด€๊ณ„ ๋งคํ•‘ (DB Relationship)โœจ

chaerlo127 2022. 1. 27. 13:09
728x90

1. ์—ฐ๊ด€๊ด€๊ณ„ ์–ด๋…ธํ…Œ์ด์…˜ -> [์ถœ์ฒ˜]

  • one to one: ์ผ๋Œ€์ผ ๋งคํ•‘
  • one to many: ์ผ๋Œ€๋‹ค ๋งคํ•‘
  • many to one: ๋‹ค๋Œ€์ผ ๋งคํ•‘

 

2. Many to One Mapping

User์™€ OrderLine์ด 1:n์˜ ๊ด€๊ณ„์ด๋ฉด, OrderLine Table์— @ManyToOne ์–ด๋…ธํ…Œ์ด์…˜์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

  • @ManyToOne(fetch = FetchType.LAZY)
  • FetchType.EAGER [์ฆ‰์‹œ๋กœ๋”ฉ]๋Š” ์—ฐ๊ด€๋œ ์—”ํ„ฐํ‹ฐ๋ฅผ ๋ฐ”๋กœ ์กฐํšŒํ•œ๋‹ค. ์‹ค์ œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋”๋ผ๋„ ์กฐํšŒ๋ฅผํ•œ๋‹ค.
  • FetchType.LAZY [์ง€์—ฐ๋กœ๋”ฉ]์€ ์‹ค์ œ ์‚ฌ์šฉ ์‹œ์ ์— ์กฐํšŒํ•œ๋‹ค.

 

  • @JoinColumn(name="FK")
  • ์™ธ๋ž˜ํ‚ค ๋งคํ•‘์‹œ ์‚ฌ์šฉ

 

  • @ManyToOne(optional =True) : FK๋Š” Null (Total participation constraint์™€ ๊ฐ™์Œ)
  • @ManyToOne(optional =False) : FK๋Š” Not null(Partial participation constraint์™€ ๊ฐ™์Œ)

๊ฐ€๊ธ‰์ ์ด๋ฉด FetchType.LAZY๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

3. One to Many Mapping

User์™€ OrderLine์ด 1:n์˜ ๊ด€๊ณ„์ด๋ฉด, User Table์— @OneToMany ์–ด๋…ธํ…Œ์ด์…˜์„ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

  • @OneToMany(mappedBy = " ")
  • mappedBy๋Š” ์–‘๋ฐฉํ–ฅ ๋งคํ•‘์—์„œ ์ฐธ์กฐ ๋‹นํ•˜๋Š” Entity์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  •  ํ˜„์žฌ ์ž์‹ ์˜ ์ฐธ์กฐ๊ฐ€ ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ์— ์–ด๋–ค ๋ณ€์ˆ˜๋กœ ์ง€์ •๋˜์—ˆ๋Š”์ง€ JPA ์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•จ์ด๋‹ค.

 

  • ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„์—์„œ๋Š” ์™ธ๋ž˜ ํ‚ค๋ฅผ ๊ฐ–๋Š” ์ชฝ์—์„œ๋งŒ UPDATE, INSERT๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ์—†๋Š” ์ชฝ์€ SELECT๋งŒ ์ˆ˜ํ–‰ํ•  ๊ฒƒ
  • Lombok @ToString(exclude ="") ์ด์šฉ

 

4. Transactional

  • JPA์˜ ๋ชจ๋“  ์ž‘์—…์„ ํ•˜๋‚˜์˜ Transactional ์•ˆ์—์„œ ์‹œํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • @Transactional ์€ ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ฑธ์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

 

5. Rollback

  • @Rollback(false) : ์‹คํ–‰์‹œ DB์— ์ €์žฅ
  • @Rollback(true) : ์‹คํ–‰์‹œ DB์— ์ €์žฅํ•˜์ง€ ์•Š์Œ

 

 

[์ถœ์ฒ˜]

https://cornswrold.tistory.com/350

https://wonit.tistory.com/466

https://feco.tistory.com/102

728x90