JPA์์ ์ํฐํฐ์ ๊ธฐ๋ณธ ํค(PK)๋ฅผ ์๋ ์์ฑํ๋ ค๋ฉด @GeneratedValue๋ฅผ ์ฌ์ฉํ๋ค.
ํ์ง๋ง ์ด๋ ์ด๋ค strategy๋ฅผ ์ค์ ํ๋๋์ ๋ฐ๋ผ ๋์ ๋ฐฉ์๊ณผ ํผํฌ๋จผ์ค๊ฐ ๋ฌ๋ผ์ง๋ค.
PostgreSQL ํ๊ฒฝ์ ๊ธฐ์ค์ผ๋ก @GeneratedValue ์ฌ์ฉ๋ฒ๊ณผ ์ถ์ฒ ์ค์ ์ ์ ๋ฆฌํ๋ค.
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
@Id
@GeneratedValue
private Long id;
- strategy๋ฅผ ์๋ตํ๋ฉด JPA๋ ๊ธฐ๋ณธ ์ ๋ต์ธ GenerationType.AUTO๋ฅผ ์ ์ฉํ๋ค.
- AUTO๋ ์ฌ์ฉํ๋ DB์ ๋ง์ถฐ ์๋์ผ๋ก ์ ๋ต์ ๊ฒฐ์ ํ๋ค.
- PostgreSQL์์๋ AUTO → SEQUENCE ์ ๋ต์ผ๋ก ๋์ํ๋ค.
์ ๋ต๋ณ ๋์ ์ฐจ์ด
์ ๋ต์ค๋ช PostgreSQL ์ง์ ์ฌ๋ถํน์ง
| AUTO | DB์ ๋ฐ๋ผ ์๋ ์ ํ | O | PostgreSQL์์๋ SEQUENCE ์ ํ๋จ |
| IDENTITY | DB์ auto-increment ์ฌ์ฉ | O (v10 ์ด์) | insert ์ฆ์ ์คํ๋จ, ๋ฐฐ์น ์ด๋ ค์ |
| SEQUENCE | DB ์ํ์ค ์ฌ์ฉ | O | ํผํฌ๋จผ์ค ์ฐ์, ๋ฐฐ์น insert ๊ฐ๋ฅ |
| TABLE | ๋ณ๋ ํ ์ด๋ธ๋ก ์ํ์ค ๊ด๋ฆฌ | O | ๋๋ฆผ, ๊ฑฐ์ ์ ์ |
PostgreSQL์์๋ SEQUENCE ์ ๋ต ๊ถ์ฅ
PostgreSQL์ Oracle์ฒ๋ผ SEQUENCE๋ฅผ ์ ์ง์ํ๊ธฐ ๋๋ฌธ์,
์๋ ์์ฑ ์ ๋ต์ผ๋ก๋ GenerationType.SEQUENCE๋ฅผ ๋ช
์์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ์์ ์ ์ด๋ค.
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "member_seq")
@SequenceGenerator(
name = "member_seq",
sequenceName = "member_seq", // ์ค์ DB์ ์์ฑ๋ ์ํ์ค ์ด๋ฆ
allocationSize = 1 // ๊ธฐ๋ณธ๊ฐ 50 → 1๋ก ์ค์ด๋ฉด ID ์์ฐจ์ฑ ์ ์ง ๊ฐ๋ฅ
)
private Long id;
์ฃผ์: ์ ์ค์ ์ ์ฌ์ฉํ๋ฉด, DB์ member_seq๋ผ๋ ์ํ์ค๊ฐ ์์ด์ผ ํ๋ฉฐ, ์์ผ๋ฉด JPA๊ฐ ์๋ ์์ฑํ ์ ์๋๋ก ์ค์ ํ๊ฑฐ๋ ์ง์ ์์ฑํด์ผ ํ๋ค.
๊ทธ๋ผ ์๋ฌด ์ค์ ๋ ์ ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
@Id
@GeneratedValue
private Long id;
- PostgreSQL์์๋ ์๋์ผ๋ก hibernate_sequence๋ผ๋ ์ํ์ค๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๋ค.
- ๋ฌธ์ ๋ ๋ชจ๋ ํ ์ด๋ธ์ด ์ด ์ํ์ค๋ฅผ ๊ณต์ ํ ์ ์๋ค๋ ๊ฒ.
- ํ ์ด๋ธ๋ง๋ค ์ํ์ค๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด @SequenceGenerator๋ก ๋ช ์ํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ค๋ฌด ๊ธฐ์ค ์ถ์ฒ ๋ฐฉ์
- ํ์ต์ฉ/๊ฐ๋จํ ํ๋ก์ ํธ → @GeneratedValue๋ง ์จ๋ ๋ฌด๋ฐฉ
- ์ค๋ฌด ํ๋ก์ ํธ → @GeneratedValue(strategy = SEQUENCE) + @SequenceGenerator ๋ช ์