λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

JPA

Entity κ°„μ˜ 관계

Entityλ“€ κ°„μ˜ 관계

μΌλŒ€λ‹€(One-to-Many), λ‹€λŒ€μΌ(Many-to-One), λ‹€λŒ€λ‹€(Many-to-Many) 관계에 λŒ€ν•΄ μ•Œμ•„λ³΄μž.

개체, 관계, 속성

λ°μ΄ν„°λ² μ΄μŠ€μ˜ κ°œλ…μ  ꡬ성 μš”μ†ŒλŠ” 개체(Entity), 관계(Relationship), 속성(Attriube) μ„Έ κ°€μ§€λ‘œ 이루어져 μžˆλ‹€.

μ—¬κΈ°μ„œ κ°œμ²΄λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ‹€λ£¨λŠ” 사물, 즉 λŒ€μƒμ„ λ§ν•˜λŠ” 것이고, κ΄€κ³„λŠ” κ·Έ μ‚¬λ¬Όλ“€λΌλ¦¬μ˜ 연관을 μ–˜κΈ°ν•˜λŠ” 것이고, 속성은 κ·Έ 사물듀이 가지고 μžˆλŠ” 각자의 νŠΉμ„±μ„ λ§ν•˜λŠ” μš©μ–΄μ΄λ‹€.

νšŒμ›λ“€μ΄ 글을 μž‘μ„±ν•  수 μžˆλŠ” κ²Œμ‹œνŒ 웹을 λ§Œλ“ λ‹€κ³  μƒκ°ν•΄λ³΄μž.

μš°μ„ μ μœΌλ‘œ νšŒμ›μ΄ ν•„μš”ν•˜κ³ , κ·Έ νšŒμ›μ΄ μ“Έ 수 μžˆλŠ” κ²Œμ‹œκΈ€μ΄ ν•„μš”ν•˜λ‹€.

κ·ΈλŸ¬λ―€λ‘œ μ΄λ•Œ ν•„μš”ν•œ 개체(Entity)λŠ” νšŒμ›(User), κ²Œμ‹œκΈ€(Board)인 두 개의 κ°œμ²΄κ°€ ν•„μš”ν•˜λ‹€.

또 두 개체의 사이λ₯Ό ν™•μΈν•˜λ©° 관계에 λŒ€ν•΄ μ„€λͺ…ν•  수 μžˆλ‹€.

ν•œ λͺ…μ˜ νšŒμ›μ€ μ—¬λŸ¬ 가지 κ²Œμ‹œκΈ€μ„ μ“Έ 수 μžˆμ§€λ§Œ, κ²Œμ‹œκΈ€μ€ κ²Œμ‹œκΈ€μ΄ μ“΄ νšŒμ›μ΄ μ—¬λŸ¬ λͺ…이 될 수 μ—†κ³  였직 ν•œ λͺ…μ˜ νšŒμ›λ§Œ κ²Œμ‹œκΈ€μ˜ μž‘μ„±μžκ°€ 될 수 μžˆλ‹€.

κ·ΈλŸ¬λ―€λ‘œ νšŒμ›κ³Ό κ²Œμ‹œκΈ€μ˜ 관계(Relationship)λŠ” μΌλŒ€λ‹€(One-to-Many, 1:m) κ΄€κ³„μž„μ„ μ•Œ 수 μžˆλ‹€.

λ˜ν•œ λ°˜λŒ€λ‘œ κ²Œμ‹œκΈ€κ³Ό νšŒμ›μ˜ 관계(Relationship)λŠ” λ‹€λŒ€μΌ(Many-to-One, 1:m) κ΄€κ³„μž„μ„ μ•Œ 수 μžˆλ‹€.

이외에도 λ‹€λŒ€λ‹€(Many-to-Many) 관계도 μžˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ νšŒμ› κ°œμ²΄μ™€ κ²Œμ‹œκΈ€ κ°œμ²΄κ°€ 각각 가지고 μžˆλŠ” νŠΉμ„±μ„ 속성이라고 ν•  수 μžˆλ‹€.

νšŒμ›μ˜ κ²½μš°μ—” νšŒμ›μ˜ νšŒμ› 번호, 이름, λΉ„λ°€λ²ˆν˜Έ, 이메일 등이 속성이라고 ν•  수 있고, κ²Œμ‹œλ¬Όμ˜ κ²½μš°μ—” κ²Œμ‹œλ¬Ό 번호, κ²Œμ‹œλ¬Ό 제λͺ©, κ²Œμ‹œλ¬Ό λ‚΄μš©, κ²Œμ‹œλ¬Ό 쑰회 수 등이 속성이라고 ν•  수 μžˆλ‹€.

JPA의 관계 μ–΄λ…Έν…Œμ΄μ…˜

μœ„μ˜ μ˜ˆμ‹œλ₯Ό λ°”νƒ•μœΌλ‘œ User와 Board Model이 μžˆλ‹€κ³  ν•˜μž.

κ²Œμ‹œνŒμ„ 뢈러올 λ•Œ, 항상 κ·Έ κ²Œμ‹œνŒμ„ μ“΄ μž‘μ„±μžμ˜ 정보λ₯Ό 가져와야 ν•˜λ―€λ‘œ, κ²Œμ‹œνŒμ—μ„œ 관계에 λŒ€ν•œ μ–΄λ…Έν…Œμ΄μ…˜μ„ λΆ™μ—¬μ€€λ‹€.

Board.java

    // ...

    @ManyToOne
    @JoinColumn(name = "userId")
    private User user;

    // ...

ν•œ λͺ…μ˜ Userκ°€ λ‹€μˆ˜μ˜ κ²Œμ‹œνŒμ„ μž‘μ„±ν•  수 μžˆμœΌλ―€λ‘œ κ²Œμ‹œνŒμ˜ μž…μž₯μ—μ„œ ManyToOne μ–΄λ…Έν…Œμ΄μ…˜μ„ λΆ™μ—¬μ£Όμ–΄μ•Ό ν•œλ‹€.

Many = Board, One = User의 관계이닀.

User κ²Œμ‹œνŒκ³Ό Join이 ν•„μš”ν•˜λ―€λ‘œ @JoinColumn(name = "userId")도 λΆ™μ—¬μ€€λ‹€.

μ›λž˜ DBλŠ” 였브젝트λ₯Ό μ €μž₯ν•  수 μ—†μ–΄μ„œ FKλ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ, μžλ°”λŠ” 였브젝트λ₯Ό μ €μž₯ν•  수 μžˆμœΌλ―€λ‘œ User 였브젝트λ₯Ό λΆ™μ—¬μ€€λ‹€.

이런 κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ™€ 객체지ν–₯ μ–Έμ–΄μ˜ νŒ¨λŸ¬λ‹€μž„ 차이λ₯Ό JPAκ°€ ν•΄κ²°ν•΄ μ€€λ‹€.