JPA๊ฐ ์ ๊ณตํ๋ DB ๊ธฐ๋ณธ ํค ํ ๋น ์ ๋ต์ ์ง์ ํ ๋น ๋ฐฉ์, ์๋ ์์ฑ ๋ฐฉ์ 2๊ฐ์ง๊ฐ ์๋ค.
โ๏ธ์ง์ ํ ๋น ๋ฐฉ์
ํ๋์ @Id ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด์ฃผ๋ฉด ๋๋ค.
@Id
private int userNo;
@Column ์ด๋ ธํ ์ด์ ์ ๊ฐ ํ๋ ์์ ๋ถ์ฌ์ ์ปฌ๋ผ๋ช ์ ๋ฐ๋ก ์ง์ ํ์ง ์์ผ๋ฉด JPA๊ฐ ์์์ camelCase๋ก ์์ฑ๋ ํ๋๋ช ์ snake_case๋ก ์์ฑ๋ ํ ์ด๋ธ ์ปฌ๋ผ๊ณผ ๋งคํ์์ผ์ค๋ค.
@Column(name = "user_id")
private String userId;
(camelCase)userId <-> (snake_case)user_id
ํด๋น ์ ๋ต์ Application์์ ์ง์ ๊ธฐ๋ณธ ํค๋ฅผ ํ ๋นํด์ฃผ์ด์ผ ํ๋ค!
โ๏ธ์๋ ์์ฑ ๋ฐฉ์
@Id์ @GeneratedValue๋ฅผ ์ฌ์ฉํด์ค๋ค.
4๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํจ(IDENTITY, SEQUENCE, TABLE, AUTO)
โ๏ธIDENTITY
๊ธฐ๋ณธ ํค ์์ฑ์ DB์ ์์ํ๋ ์ ๋ต
MySQL๊ณผ ๊ฐ์ด Sequence๋ฅผ ์ ๊ณตํ์ง ์๊ณ AutoIncrement๊ธฐ๋ฅ์ ์ ๊ณตํด ๊ธฐ๋ณธ ํค ๊ฐ์ ์๋์ผ๋ก ์์ฑํ๋ DBMS์์ ์ฌ์ฉํ๋ค.
MySQL, PostgreSQL, SQL Server ๋ฑ์์ ์ฌ์ฉํ๋ฉฐ, Oracle์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํจ
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int userNo;
โ๏ธSEQUENCE
DB Sequence๋ฅผ ์ด์ฉํด ๊ธฐ๋ณธ ํค๋ฅผ ํ ๋นํ๋ ๋ฐฉ์
DB์ ์ ์ํ์ค๋ฅผ ๋จผ์ ์์ฑ ํ์ ์ฌ์ฉํ ์ ์๋ค.
CREATE SEQUENCE SEQ_USER_NO;
ํ์ Entity์ @SequenceGenerator ์ ์ฌ์ฉํ์ฌ ์์ฑํ ์ํ์ค๋ฅผ ์ ์ํด์ค๋ค.
@SequenceGenerator(name = "USER_SEQ_GENERATOR"
,sequenceName = "SEQ_USER_NO"
, initialValue = 1
, allocationSize = 1)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USER_SEQ_GENERATOR")
private int userNo;
}
โ๏ธTABLE
Key ์์ฑ Table์ ์ฌ์ฉํ๋ ์ ๋ต
Key ์์ฑ ์ ์ฉ Table์ ์์ฑํ๊ณ , name,value๋ก ์ฌ์ฉํ ์ปฌ๋ผ์ ์์ฑํ์ฌ DB SEQEUNCE๋ฅผ ํ๋ด๋ด๋ ์ ๋ต์ด๋ค.
CREATE TABLE USER_SEQUENCE (
sequence_name varchar(255) not null
, next_val number
, primary key (sequence_name)
);
@TableGenerator(name = "USER_SEQ_GENERATOR"
, table = "USER_SEQUENCE"
, pkColumnValue = "SEQ_USER_NO"
, allocationSize = 1)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "USER_SEQ_GENERATOR")
private int userNo;
}
โ๏ธAUTO
์ฌ์ฉํ๋ DBMS์ ๋ฐ๋ผ ์๋์ผ๋ก IDENTITY, SEQUENCE, TABLE ์ ๋ต์ ์๋์ผ๋ก ์ ํํด์ค๋ค.
AUTO๋ก SEQUENCE๋ TABLE์ด ์ ํ๋ ๊ฒฝ์ฐ DB์์ ๋ฏธ๋ฆฌ SEQUENCE๋ TABLE์ ๋ฏธ๋ฆฌ ์์ฑํด ๋์ด์ผ ํจ.
'Spring > JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Hibernate๊ฐ DB์ ์ํํ๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฌธ ์ฝ์์ ์ถ๋ ฅํ๊ธฐ (0) | 2023.10.12 |
---|---|
[JPA] ์ํ์ฐธ์กฐ์ ํด๊ฒฐ ๋ฐฉ๋ฒ (1) | 2023.10.10 |
[JPA] QueryDSL + ์ค์ ๋ฐฉ๋ฒ (0) | 2023.08.08 |
[JPA] Update๋ฅผ ์ํ ๋ํฐ ์ฒดํน (Dirty Checking) (0) | 2023.07.21 |