[Spring] JPA(Java Persistance API) ๊ธฐ๋ณธ
JPA๋ ORM(Object Realation Mapping) ๋๊ตฌ ์ค ํ๋๋ค.
์ด๊ฒ ๋ญ ์๋ฆฌ๋๋ฉด, OOP ์ธ์ด์ ๊ฐ์ฒด์, SQL DB๋ฅผ ์ฐ๊ฒฐํด์ค๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ JPA ์์ฒด๋ ๊ทธ๋ฅ ์ธํฐํ์ด์ค๋ผ์ ํผ์ ์๋ํ์ง๋ ๋ชปํ๋ค.
๊ทธ๋์ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํด์ผํ๋๋ฐ, Hibernate, EclipseLink ๋ฑ์ด ์๋ค.
๋ณดํต ํ์ด๋ฒ๋ค์ดํธ๋ฅผ ๋ ์ฐ๋๊ฒ๊ฐ๋ค.
๋จผ์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ณ ๋ฅด๊ณ , ์์กด์ฑ์ ์ด๋์ ๋ ์ถ๊ฐํด์ค๋ค.
๋ mysql์ ์ฌ์ฉํ๋ค.
์ ์ธํ
ํด๋๊ณ
์์ฑ ํ์ผ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ uri๊ณผ, ์ฌ์ฉ์๋ช
, ๋น๋ฐ๋ฒํธ, ๋๋ผ์ด๋ฒ ํด๋์ค๋ฅผ ๋ฃ์ด์ค๋ค.
์ํ๋ฉด ์คํ๋ ์๋๋ค.
์ํฐํฐ
๊ทธ๋ฆฌ๊ณ @Entity ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํด ์ํฐํฐ ํ์
์ ๋ง๋ ๋ค.
์ด๊ฒ ๋ฐ๋ก ํ
์ด๋ธ์ ๊ฐ ํ(Row) ์ ๋ณด๋ฅผ ๋ด๊ณ ๊ด๋ฆฌํ๋ ํ์
์ด๋ค.
๋๋ฌธ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๊ณ , ๊ฐ์ฅ ์ค์ํ๋ค.
๋ด๊ฐ ์ฌ์ฉํ ํ ์ด๋ธ์ ์ด๋ ๊ฒ ๋์ด์์ผ๋ฏ๋ก

์ด๋ ๊ฒ ์ ์ํ ์ ์๋ค.
๊ฐ ํ๋์ ์ด๋ฆ์ ์ผ์น์ํค๊ณ , ๋ํดํธ ์์ฑ์๋ฅผ ๊ผญ ๋ฌ์ผํ๋จ๊ฑธ ์์ง ๋ง์.
Getter๋ Setter๋ ๋ญ ๋ฌ๊ณ ๋๊ณ , ์ ๋ฌ๋ ๋๊ณ .
๊ทธ๋ฆฌ๊ณ Entity์ ์ธ์๋ก ํ
์ด๋ธ๋ช
์ ์คฌ๋๋ฐ, ์ด๋ฆ์ ์ฃผ์ง ์์ผ๋ฉด ํด๋์ค๋ช
์ ํ
์ด๋ธ ์ด๋ฆ์ผ๋ก ๊ฐ์ฃผํ๋ค.
Table ์ด๋
ธํ
์ด์
์ผ๋ก ์ด๋ฆ์ ์ง์ ํ ์๋ ์๋ค.

Column ์ด๋ ธํ ์ด์
๊ฐ ์์ฑ(์ด:column)์ ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ๊ณ ์ถ๋ค๋ฉด, Column ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฌ๋ฉด ์ค์ ์์ฑ๋ช
๊ณผ ํ๋์ ์ด๋ฆ์ด ์ผ์นํ์ง ์์๋ ๋๋ค.
Jpa ๋ ํฌ์งํ ๋ฆฌ
๊ทธ๋ค์์ ํ ๊ฑด ์ ๊ทผ์ฉ ๋ ํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ค.
๋ ํฌ์งํ ๋ฆฌ๋ ํน์ ํ
์ด๋ธ์ ๋ํ ์ ๊ทผ์ ์ ์ดํ๋ค.
JpaRepository์ ์ ์ํ ์ํฐํฐํ์
๊ณผ Long๋ง ์ง์ด๋ฃ์ผ๋ฉด ๋๋ค!
๊ตฌํ์ ํ ํ์๊ฐ ์๋ค. ์คํ๋ง์ด ์์์ ๋ง์ ์ ๋ถ๋ ค์ ์ฑ์์ค๋ค.
๊ทธ๋ผ ์ด์ ์ ๊ฑธ ํ๋ฒ ๋๋ ค๋ณด์
์ผ๋จ์ ์ฝ๋์ ๋จ์ํจ์ ์ํด main ํจ์์์๋ง ๋๋ ค๋ณผ ๊ฒ์ด๋ค.
run ๋ฉ์๋๋ context ๊ฐ์ฒด๋ฅผ ๋ฐํํ๊ณ , ์ฌ๊ธฐ์ ๋น ๊ฐ์ฒด๋ค์ ๊บผ๋ด์ฌ ์ ์๋ค.
์์ NameRepository ํด๋์ค๋ @Repository๋ฅผ ๋ฌ์์ผ๋ฏ๋ก ๋น์ฐํ ๋น์ฆ ๊ฐ์ฒด๋ก ์์ฑ๋๋ค.
JpaRepository์ ์ด๋ฐ์ ๋ฐ ๊ธฐ๋ณธ ๋ฉ์๋๊ฐ ์กด์ฌํ๋๋ฐ, ๊ทธ ์ค์์๋ findAll์ select *์ ํจ๊ณผ๋ฅผ ๋ธ๋ค.
์ํฐํฐ๋ฅผ ์ ๋ถ ๊ฐ์ ธ์จ๋จ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๋๋ฆฌ๋ฉด
์ ๊ฐ์ ธ์ค๋ ๊ฑธ ๋ณผ ์ ์๋ค.
์ด์ธ์ ์ง์ ๊ฒ์์ฉ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด, ์๊น ๋ ํฌ์งํ ๋ฆฌ์ ์ถ๊ฐ ์ ์ธ์ ํ๋ฉด ๋๋ค.

๊ทธ๋ผ ๋ญ

์ ์ฐพ์์จ๋ค.
์ฌ๊ธฐ์ ๋จ์ํจ์ ์ํด์ ๋์ถฉ main์์๋ง ๋๋ ธ์ง๋ง,
์ ๋๋ก ์ฐ๋ ค๋ฉด ํ๋์์ @Autowired ๋ฑ์ผ๋ก ์ฃผ์
ํ๋ฉด ๋๋ค.
๋ฐ์ดํฐ ์ฝ์
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๋ฉด ๋ ํฌ์งํ ๋ฆฌ์ save ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
URI๋ก name ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์ DB์ ์ฝ์
ํ๋๋ก ํ๋ค.

์ ๋ค์ด๊ฐ๋ค.
๊ทธ๋ฐ๋ฐ ์ฝ์ ์๋ ์์ ์๋์ ๊ฐ์ ์์ธ๊ฐ ํฐ์ง ์๋ ์๋ค.
jpa jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist
์ด๊ฒ... ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ ๋งคํ ๊ธฐ๋ฅ์ด ์ ๋๋ก ๊ธฐ๋ฅํ์ง ์์์ ๊ทธ๋ ๋ค.
๊ทธ๋ผ ์ํฐํฐ ์ ์์์ strategy๋ฅผ AUTO์์ IDENTITY๋ก ๋ฐ๊ฟ์ค๋ค. ํด๋น ์๋ณ์ ๊ทธ๋๋ก ๋ฐ๋ผ๊ฐ๊ฒ ๋ค๋ ๋ป์ด๋ค.

์๋๋ฉด ์ปฌ๋ผ๋ช ์ ๋ช ์ํด๋ ์ข๋ค.

๋ฐ์ดํฐ ์ญ์
๋ฐ์ดํฐ๋ฅผ ์ง์ฐ๋ ค๋ฉด delete ๋ฑ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
deleteById๋ id๋ฅผ ๋ฐ์์ ๋ฐ๋ก ์ญ์ ๋ฅผ ์ํํ๋ค.
์ ๊ฑธ ๋๋ฆฌ๋ฉด
์ด๋ ๋ ๊ฒ

์ด๋ ๊ฒ ์ ๊ทผํ๋ฉด

๋ ๋ผ๊ฐ๋ค.
์ฐธ์กฐ
[์คํ๋ง ๋ถํธ๋ก ๋ฐฐ์ฐ๋ ์๋ฐ ์น ๊ฐ๋ฐ]
https://blog.woniper.net/255
https://blog.woniper.net/258
https://stackoverflow.com/questions/49813666/table-dbname-hibernate-sequence-doesnt-exist