πŸ‘¨β€πŸ‘§β€πŸ‘¦ μΌλŒ€λ‹€

μΌλŒ€λ‹€ κ΄€κ³„λŠ” λ‹€λŒ€μΌ κ΄€κ³„μ˜ λ°˜λŒ€ λ°©ν–₯이닀.

μΌλŒ€λ‹€ κ΄€κ³„λŠ” μ—”ν‹°ν‹°λ₯Ό ν•˜λ‚˜ 이상 μ°Έμ‘°ν•  수 μžˆμœΌλ―€λ‘œ

μžλ°” μ»¬λ ‰μ…˜μΈ Collection, List, Set, Map 쀑에 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

1. μΌλŒ€λ‹€ 단방ν–₯ [1:N]

ν•˜λ‚˜μ˜ νŒ€μ€ μ—¬λŸ¬ νšŒμ›μ„ μ°Έμ‘°ν•  수 μžˆλŠ”λ° 이런 관계λ₯Ό μΌλŒ€λ‹€ 관계라 ν•œλ‹€.

νŒ€μ€ νšŒμ›λ“€μ„ μ°Έμ‘°ν•˜μ§€λ§Œ λ°˜λŒ€λ‘œ νšŒμ›μ€ νŒ€μ„ μ°Έμ‘°ν•˜μ§€ μ•ŠμœΌλ©΄ λ‘˜μ˜ κ΄€κ³„λŠ” 단방ν–₯이닀.

νŒ€ μ—”ν‹°ν‹°μ˜ Team.members둜 νšŒμ› ν…Œμ΄λΈ”μ˜ TEAM_ID μ™Έλž˜ν‚€λ₯Ό κ΄€λ¦¬ν•œλ‹€.

보톡 μžμ‹ μ΄ λ§€ν•‘ν•œ ν…Œμ΄λΈ”μ˜ μ™Έλž˜ν‚€λ₯Ό κ΄€λ¦¬ν•˜λŠ”λ°, 이 맀핑은 λ°˜λŒ€μͺ½ ν…Œμ΄λΈ”μ— μžˆλŠ” μ™Έλž˜ν‚€λ₯Ό κ΄€λ¦¬ν•œλ‹€.

그럴 수 밖에 μ—†λŠ” 것이 μΌλŒ€λ‹€ κ΄€κ³„μ—μ„œ μ™Έλž˜ν‚€λŠ” 항상 ’닀’μͺ½ ν…Œμ΄λΈ”μ— μžˆλ‹€.

ν•˜μ§€λ§Œ ’닀’μͺ½μΈ Member μ—”ν‹°ν‹°μ—λŠ” μ™Έλž˜ν‚€λ₯Ό λ§€ν•‘ν•  수 μžˆλŠ” μ°Έμ‘° ν•„λ“œκ°€ μ—†λ‹€.

λŒ€μ‹  λ°˜λŒ€μͺ½μΈ Team μ—”ν‹°ν‹°μ—λ§Œ μ°Έμ‘° ν•„λ“œμΈ membersκ°€ μžˆλ‹€.

λ”°λΌμ„œ λ°˜λŒ€νŽΈ ν…Œμ΄λΈ”μ˜ μ™Έλž˜ν‚€λ₯Ό κ΄€λ¦¬ν•˜λŠ” νŠΉμ΄ν•œ λͺ¨μŠ΅μ΄ λ‚˜νƒ€λ‚œλ‹€.

//νŒ€ μ—”ν‹°ν‹°@Entitypublic class Team{    @Id    @GeneratedValue    @Column(name = "TEAM_ID")    private String id;    private String name;    @OneToMany    @JoinColumn(name = "TEAM_ID") //MEMBER ν…Œμ΄λΈ”μ˜ TEAM_ID(FK)    private List<Member> members = new ArrayList<Member>();    //Getter, Setter...}
//νšŒμ› μ—”ν‹°ν‹°@Entitypublic class Member{    @Id    @GeneratedValue    @Column(name = "MEMBER_ID")    private String id;    private String username;    //Getter, Setter...}

μΌλŒ€λ‹€ 단방ν–₯ 관계λ₯Ό λ§€ν•‘ν•  λ•ŒλŠ” @JoinColumn을 λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.

κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ JPAλŠ” μ—°κ²° ν…Œμ΄λΈ”μ„ 쀑간에 두고 연관관계λ₯Ό κ΄€λ¦¬ν•˜λŠ” μ‘°μΈν…Œμ΄λΈ”(JoinTable) μ „λž΅μ„ 기본으둜 μ‚¬μš©ν•΄μ„œ λ§€ν•‘ν•œλ‹€.(7μž₯ 4)