# [JPA] Entity Mapping : ๊ธฐ๋ณธ ํ‚ค(PK) ๋งคํ•‘
Study Repository

[JPA] Entity Mapping : ๊ธฐ๋ณธ ํ‚ค(PK) ๋งคํ•‘

by rlaehddnd0422

๊ธฐ๋ณธ ํ‚ค(Primary Key)๋ž€?

๊ธฐ๋ณธ ํ‚ค(Primary Key)๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ์—ด(๋˜๋Š” ์—ด์˜ ์ง‘ํ•ฉ)์ž…๋‹ˆ๋‹ค.

 

์ฆ‰, ๊ธฐ๋ณธ ํ‚ค๋Š” ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , ๊ฐ ํ–‰์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํ‚ค๋Š” ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ณ ์œ ํ•œ ๊ฐ’์„ ๊ฐ€์ ธ์•ผ ํ•˜๋ฉฐ, NULL ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. - ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด ์ค‘ ๊ธฐ๋ณธ ํ‚ค ์ œ์•ฝ์กฐ๊ฑด

 

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

JPA๋ฅผ ์‚ฌ์šฉํ•œ ๊ธฐ๋ณธ ํ‚ค ๋งคํ•‘ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ธฐ๋ณธ ํ‚ค๋ฅผ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์„ค์ •ํ•  ํด๋ž˜์Šค(Entity)์˜ ํ•„๋“œ์— @Id ์–ด๋…ธํ…Œ์ด์…˜ ๋ถ™ํ˜€์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

๊ธฐ๋ณธ ํ‚ค๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

 

1. ์ง์ ‘ ํ• ๋‹นํ•˜๊ธฐ

: ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ง์ ‘ ํ• ๋‹นํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์‹๋ณ„์ž ๊ฐ’ ์—†์ด persistํ•˜๊ฒŒ ๋˜๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

2. ์ž๋™ ํ• ๋‹นํ•˜๊ธฐ 

: ๋Œ€๋ฆฌ ํ‚ค ์‚ฌ์šฉ ๋ฐฉ์‹์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ ํ• ๋‹น ๋ฐฉ์‹, ๋Œ€๋ฆฌ ํ‚ค ์‚ฌ์šฉ๋ฐฉ์‹ ๋˜ํ•œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

2-1. IDENTITY : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ์ƒ์„ฑํ•ด์„œ ์ž๋™์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹

2-2. SEQUENCE : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ์ž๋™์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹

2-3. TABLE : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ‚ค ์ƒ์„ฑ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ์ž๋™์œผ๋กœ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹.

 

ํ•˜๋‚˜์”ฉ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


IDENTITY ์ „๋žต

๊ธฐ๋ณธ ํ‚ค ๊ฐ’ ์ƒ์„ฑ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์œ„์ž„ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ MySQL, PostgreSQL, SQL Server, DB2์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

IDENTITY ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด

1. ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ์— AUTO_INCREMENT ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

create table Member (
	id int not null AUTO_INCREMENT PRIMARY KEY,
	name varchar(255)
);

 

2. ์—”ํ‹ฐํ‹ฐ์—๋Š” PK์— ๋งคํ•‘๋˜๋Š” ํ•„๋“œ์— @GeneratedValue์˜ strategy ์†์„ฑ ๊ฐ’์„  GenerationType.IDENTITY๋กœ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Entity
public class Member(
	
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    
}
IDENTITY ์ „๋žต์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— insertํ•จ๊ณผ ๋™์‹œ์— ๊ธฐ๋ณธํ‚ค ๊ฐ’์ด ์—”ํ‹ฐํ‹ฐ์— ๋งคํ•‘๋˜๊ธฐ ๋•Œ๋ฌธ์— insert ํ•œ ์ดํ›„ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  
IDENTITY ์ „๋žต์—์„œ๋Š” ์˜ˆ์™ธ์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์•„๋„ em.persist(entity)๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด insert SQL์ด ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. (๊ธฐ๋ณธ ํ‚ค ๊ฐ’์€ insert ํ•˜๋ฉด์„œ ๋™์‹œ์— ์ƒ์„ฑ)

์ฆ‰, IDENTITY ์ „๋žต์—์„œ๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์“ฐ๊ธฐ์ง€์—ฐ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
IDENTITY ์ „๋žต์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋งคํ•‘๋˜๋Š” ๊ธฐ๋ณธํ‚ค ๊ฐ’์€ ๊ธฐ๋ณธ์ ์œผ๋กœ insertํ•  ๋•Œ๋งˆ๋‹ค๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•ด์„œ ๋‹ค์Œ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ํŒŒ์•…ํ•˜์ง€๋งŒ, JDBC3์— ์ถ”๊ฐ€๋œ Statement.getGeneratedKeys()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ์ตœ์ดˆ๋กœ ์ €์žฅํ•  ๋•Œ ์ƒ์„ฑ๋œ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ์–ป์–ด ์˜ด์œผ๋กœ์จ insert ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š๊ณ  ์ตœ์ดˆ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SEQUENCE ์ „๋žต

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค๋Š” ์œ ์ผํ•œ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ์ƒ์„ฑํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ค๋ธŒ์ ํŠธ์ž…๋‹ˆ๋‹ค. 

SEQUENCE ์ „๋žต์€ ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ ๊ฐ€๋Šฅ DB : Oracle, PostgreSQL, DB2, H2 

SEQUENCE ์ „๋žต ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‹œํ€€์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

BOARD_SEQ ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค

 

ํ˜•์‹ : create sequence [sequnceName] start with [initialValue] increment by [allocationSize]
create sequence BOARD_SEQ START WITH 1 INCREMENT BY 1;

 

2. ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค๋ฅผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

@Entity
@SequenceGenerator(
        name = "BOARD_SEQ_GENERATOR",
        sequenceName = "BOARD_SEQ",
        initialValue = 1, allocationSize = 1)
public class Board {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
    				generator = "BOARD_SEQ_GENERATOR")
    private Long id;
    
    private String data;
    
    public Board() {
    }
}

- ์—ฌ๊ธฐ์„œ name์€ Sequence ๊ฐ€ ์•„๋‹Œ Sequence Generator์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. 

- initialValue : DDL ์ƒ์„ฑ ์‹œ์—๋งŒ ์‚ฌ์šฉ๋˜๋ฉฐ, ์‹œํ€€์Šค DDL์„ ์ƒ์„ฑํ•  ๋•Œ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ์ˆ˜

- allocationSize : ์‹œํ€€์Šค ํ•œ๋ฒˆ ํ˜ธ์ถœ์— ์ฆ๊ฐ€ํ•˜๋Š” ์ˆ˜๋กœ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค ( default : 50 )

 

- ์‚ฌ์šฉํ•  ๊ธฐ๋ณธ ํ‚ค์— @Id์™€ ๋”๋ถˆ์–ด @GeneratedValue์— strategy ์†์„ฑ์„ GenerationType.SEQUENCE๋กœ ์ง€์ •ํ•ด์ฃผ๊ณ , generator ์†์„ฑ์— ์‚ฌ์šฉํ•  Sequence Generator์˜ ์ด๋ฆ„์„ ๋ฐ˜๋“œ์‹œ ๋งคํ•‘ํ•ด ์ฃผ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

 

TestCode

public class Page_136 {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();

        tx.begin();

        Board board = new Board();
        board.setData("testData");
        em.persist(board);
        
        tx.commit();
        System.out.println("board.getId() = " + board.getId());

        em.close();
        emf.close();
    }
}
์ฐธ๊ณ  : Domain์— setter, getter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ๊ฐœ๋ฐœ์—์„œ๋Š” ๋„๋ฉ”์ธ, ์—”ํ‹ฐํ‹ฐ์— getter, setter๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ์‹œ๋‹ค.

 

์‹คํ–‰ ํ›„ H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ BOARD_SEQ์˜ ํ˜„์žฌ ๊ฐ’ / ์ฝ”๋“œ ์‹คํ–‰ ๋กœ๊ทธ

 

SEQUENCE ์ „๋žต ์ตœ์ ํ™”

SEQUENCE ์ „๋žต์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค๋ฅผ ํ†ตํ•ด ์‹๋ณ„์ž๋ฅผ ์กฐํšŒํ•˜๋Š” ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

1. select BOARD_SEQ.NEXTVAL FROM DUAL

: ๋‹ค์Œ ์‹๋ณ„์ž(๊ธฐ๋ณธํ‚ค ๊ฐ’)์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค ์กฐํšŒ

 

2. insert into board ...

: ์กฐํšŒํ•œ ์‹œํ€€์Šค๋ฅผ ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ 

 

insert ํ•  ๋•Œ ๋งˆ๋‹ค ์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€ ์ž‘์—…์ด ์ด๋ฃจ์–ด์ง€๋ฉด ์„ฑ๋Šฅ ๋ฉด์—์„œ ์ข‹์ง€ ์•Š๊ฒ ์ฃ ?

 

JPA๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค์— ์ง์ ‘ ์ ‘๊ทผํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด @SequenceGenerator.allocationSize๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

AllocationSize๋ฅผ ์ ์ ˆํžˆ ์„ค์ •ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œํ€€์Šค๋ฅผ ํ•œ๋ฒˆ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ํ• ๋‹น ๋ฒ”์œ„๋งŒํผ ๋ฉ”๋ชจ๋ฆฌ์— ์‹œํ€€์Šค ๊ฐ’์„ ํ• ๋‹นํ•˜์—ฌ, DB ์‹œํ€€์Šค์— ์ง์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜์—ฌ ๋‹ค์Œ ์‹๋ณ„์ž ๊ฐ’์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ• ๋‹น ๋ฒ”์œ„๋ฅผ ํฌ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์‹œํ€€์Šค ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋นˆ๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹œํ€€์Šค ๊ฐ’์˜ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ• ๋‹น ๋ฒ”์œ„๋ฅผ ์ž‘๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์‹œํ€€์Šค ๊ฐ’์˜ ๋‚ญ๋น„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์‹œํ€€์Šค ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋นˆ๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


TABLE ์ „๋žต

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‹œํ€€์Šค ์˜ค๋ธŒ์ ํŠธ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ์ด๋ฆ„๊ณผ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ปฌ๋Ÿผ์„ ๋งŒ๋“ค์–ด ์‹œํ€€์Šค๋ฅผ ํ‰๋‚ด๋‚ด๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค. 

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

 

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— TABLE ์ „๋žต์œผ๋กœ ์‚ฌ์šฉํ•  ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

2. TABLE ์ „๋žต์œผ๋กœ ์‚ฌ์šฉํ•  ํ…Œ์ด๋ธ”์„ ์—”ํ‹ฐํ‹ฐ์— ๋งคํ•‘ํ•ด์ค๋‹ˆ๋‹ค.

@Entity
@TableGenerator(
        name = "BOARD_SEQ_GENERATOR",
        table = "my_sequence",
        pkColumnName = "BOARD_SEQ", allocationSize = 1)
public class Board {
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE,
                    generator = "BOARD_SEQ_GENERATOR")
    private Long id;
    private String data;

    public Board() {
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

    public Long getId() {
        return id;
    }
}

- name์€ ์‹œํ€€์Šค ์ „๋žต๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ table_generator์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

- table์— 1์—์„œ ์ƒ์„ฑํ•œ ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•ด์ค๋‹ˆ๋‹ค.

- pkColumnName์€ ์‹œํ€€์Šค ์ปฌ๋Ÿผ๋ช…์œผ๋กœ "sequence_name"์ด default๊ฐ’์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • 1์—์„œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ๋•Œ sequence_name์œผ๋กœ ์ง€์ •ํ–ˆ๋˜ ์ปฌ๋Ÿผ์ด BOARD_SEQ์œผ๋กœ ๋ฐ”๋€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด 

๊ธฐ๋ณธ ํ‚ค ๊ฐ’์ด ์ฆ๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


AUTO ์ „๋žต

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…๋ฅ˜์— ๋”ฐ๋ผ IDENTITY ์ „๋žต, SEQUENCE ์ „๋žต, TABLE ์ „๋žต ์ค‘ ์ž๋™์œผ๋กœ ์„ ํƒํ•ด์„œ ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์„ ํƒํ•˜๋Š” ์ „๋žต์ž…๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

@GeneratedType(strategy = GenerationType.Auto)๋กœ ์„ค์ •

 

Auto ์ „๋žต์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์‹œํ€€์Šค๋‚˜ ํ…Œ์ด๋ธ” ์ „๋žต์ด ์„ ํƒ๋  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์‹œํ€€์Šค๋‚˜ ํ‚ค ์ƒ์„ฑ์šฉ ํ…Œ์ด๋ธ”์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ท€์ฐฎ์€ ์ผ์„ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•ด์„œ ์ ์ ˆํ•œ ์‹œํ€€์Šค๋‚˜ ํ‚ค ์ƒ์„ฑ์šฉ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

 

ํ‚ค ์ƒ์„ฑ ์ „๋žต์ด ํ™•์ •๋˜์ง€ ์•Š์€ ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„๋‚˜ ํ”„๋กœํ† ํƒ€์ž… ๊ฐœ๋ฐœ ์‹œ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ!

 

<์ •๋ฆฌ>

  • ์ง์ ‘ ํ• ๋‹น : em.persist()๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๊ธฐ๋ณธ ํ‚ค๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋Š” ๋ฐฉ์‹
  • sequence ์ „๋žต : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค ์˜ค๋ธŒ์ ํŠธ์—์„œ ์‹๋ณ„์ž ๊ฐ’์„ ํš๋“ํ•˜์—ฌ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
  • table ์ „๋žต : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํ€€์Šค ์ƒ์„ฑ์šฉ ํ…Œ์ด๋ธ”์—์„œ ์‹๋ณ„์ž ๊ฐ’์„ ํš๋“ํ•ด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
  • identity ์ „๋žต : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ €์žฅํ•ด์„œ ์‹๋ณ„์ž ๊ฐ’์„ ํš๋“ํ•œ ํ›„ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
    • ์˜ˆ์™ธ์ ์œผ๋กœ ์ €์žฅ(persist)๊ณผ ๋™์‹œ์— insert SQL ์ด DB์— ์ „๋‹ฌ ๋˜๋ฏ€๋กœ ์“ฐ๊ธฐ ์ง€์—ฐ ๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
Tip : ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์„ค์ •ํ•  ๋•Œ์—๋Š” ๋น„์ฆˆ๋‹ˆ์Šค์— ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ์ž์—ฐ ํ‚ค๋ฅผ ์„ ํƒํ•˜๊ธฐ๋ณด๋‹ค ๊ด€๋ จ์—†๋Š” ์ž„์˜์˜ ํ‚ค๋ฅผ ์„ค์ •ํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค.

why ? ๋น„์ฆˆ๋‹ˆ์Šค์— ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ์ž์—ฐ ํ‚ค๋Š” ์–ธ์ œ๋“ ์ง€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—.

<์ฐธ๊ณ ์ž๋ฃŒ>

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ