티스토리 뷰

인프런 - 김영한 jpa 강의 중

 

해당 테이블 같을 때에  멤버가 팀에 소속되긱에 멤버(N) : 팀(1)의 관계가 된다.

 

객체관계에서는 TEAM_ID를 가지고 있는 것은 객체지향스럽지 않다고 한다. TEAM 객체 자체를 가지고 있어야한다.

TABLE 관점에서는 TEAM_ID를 가지고 있는 것이 맞다.

 

MEMBER 객체 안에 TEAM_ID가 아닌 TEAM 자체를 넣어준다.

 

@ManyToOne
@JoinColumn(name="TEAM_ID")
private Team team;

 

MEMBER가 N이기 떄문에 @MantToOne 관계라는 것을 어노테이션해준 뒤 DB에게 알려줄 JoinColumn을 알려준다.

이건 내가 team을 찾기 위해 필요했던 FK를 생각하면 된다.

 

Team team = new Team();
team.setName("TeamA");
em.persist(team);

Member member = new Member();
member.setUsername("member1");
member.setTeam(team); //team을 set한다.
em.persist(member);

em.flush();
em.clear();

Member findMember = em.find(Member.class, member.getId());
Team team1 = findMember.getTeam();

System.out.println("findTeam = " + team1);

 

member를 저장할 때에 team을 넣을 수 있게 된다. db에서는 자연스럽게 TEAM_ID만 저장 시키는 구조가 된다.

Hibernate: 
    /* insert jpabook.jpashop.domain.Team
        */ insert 
        into
            Team
            (name, TEAM_ID) 
        values
            (?, ?)
Hibernate: 
    /* insert jpabook.jpashop.domain.Member
        */ insert 
        into
            Member
            (TEAM_ID, USERNAME, MEMBER_ID) 
        values
            (?, ?, ?)
Hibernate: 
    select
        member0_.MEMBER_ID as MEMBER_I1_1_0_,
        member0_.TEAM_ID as TEAM_ID3_1_0_,
        member0_.USERNAME as USERNAME2_1_0_,
        team1_.TEAM_ID as TEAM_ID1_4_1_,
        team1_.name as name2_4_1_ 
    from
        Member member0_ 
    left outer join
        Team team1_ 
            on member0_.TEAM_ID=team1_.TEAM_ID 
    where
        member0_.MEMBER_ID=?

로그 내역

 

변경 때도 똑같다.

 

findMember.setTeam(newTeam);

 

변경감지로 자동 업데이트 된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함