๐ŸŒ€ INTRO

์—ฌํƒœ๊นŒ์ง€ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์—์„œ ํ•œ ์ชฝ์œผ๋กœ์˜ ์ฐธ์กฐ๋งŒ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™์•„์„œ ์–‘๋ฐฉํ–ฅ ๋งคํ•‘๋งŒ ์ฃผ๋กœ ํ–ˆ์—ˆ๋Š”๋ฐ, ๊ทธ๋Ÿฌ๋‹ค๋ณด๋‹ˆ ์˜คํžˆ๋ ค ์ƒ๋Œ€์ ์œผ๋กœ ๋‹จ์ˆœํ•œ ๋‹จ๋ฐฉํ–ฅ ๊ด€๊ณ„์— ๋Œ€ํ•œ ๊ฒฝํ—˜์  ์ง€์‹์ด ์ ์€ ๊ฒƒ ๊ฐ™์•„์„œ ์ด๊ฒƒ์ €๊ฒƒ ์‹œ๋„ํ•ด๋ดค๋‹ค.

์›์‚ฌ์ด๋“œํ•˜๊ฒŒ ์ฐธ์กฐ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋ฉด ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ์ถฉ๋ถ„ํ•œ๋ฐ, ์ƒํ˜ธ๊ฐ„ ์ฐธ์กฐ ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์„๊ฑฐ๊ฐ™์œผ๋ฉด ์–‘๋ฐฉํ–ฅ์ด ์˜คํžˆ๋ ค ํŽธํ–ˆ๋‹ค. (์• ์ดˆ์— ๊ฑฐ์˜ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์–‘๋ฐฉํ–ฅ ๊ด€๊ณ„๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค)

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ์ž์—ฐ์Šค๋ ˆ ์ƒ๊ธด ์˜๋ฌธ์€:


๐Ÿ’€ 1. ์™ธ๋ž˜ ํ‚ค๊ฐ€ โ€˜๋ฐ˜๋Œ€ํŽธโ€™์— ์ƒ๊ธด๋‹ค (๋ญ”๊ฐ€ ๋น„์ •์ƒ์ )

๋‹จ๋ฐฉํ–ฅ ๋งคํ•‘์„ ๊ฑธ์–ด์ค€ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ๋ฐ˜๋Œ€ํŽธ์— FK๊ฐ€ ์ƒ๊ธด๋‹ค.(๋ฐ˜๋Œ€ํŽธ์—์„œ๋Š” ๋งคํ•‘ ์—ฌ๋ถ€๋ฅผ ๋ชจ๋ฅผํ…๋ฐ)

@Entity
public class Order {
    @Id @GeneratedValue
    private Long id;

    @OneToMany
    @JoinColumn(name = "order_id") // fk
    private List<OrderItem> items = new ArrayList<>();
}
@Entity
public class OrderItem {
    @Id @GeneratedValue
    private Long id;
    
}

๋ฌธ์ œ์ 

Hibernate: 
    create table order (
        id int8 not null,
        customer_name varchar(255),
        primary key (id)
    ) -- fk๋Š” ์—†์Œ(์กฐ์ธ์ปฌ๋Ÿผ ๋ฌด์‹œ)

Hibernate: 
    create table order_item (
        id int8 not null,
        order_id int8,  -- fk
        product_name varchar(255),
        quantity int4,
        primary key (id)
    )

Hibernate: 
    alter table order_item 
        add constraint FK_order_item_order 
        foreign key (order_id) references order -- ์‹ค์ œ๋กœ๋Š” n-side์— ์ž˜ ์ƒ์„ฑ๋œ fk


๐Ÿ’€ 2. ์„ฑ๋Šฅ ๋ฌธ์ œ: insert 2๋ฒˆ, update 1๋ฒˆ (์ถ”๊ฐ€ ์ฟผ๋ฆฌ ๋ฐœ์ƒ)

order_id(FK)๊ฐ€ ์ž๋™์œผ๋กœ ํ•ด๊ฒฐ์ด ์•ˆ๋˜๋‹ˆ, ์ถ”๊ฐ€ ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.