연관관계 매핑

Yewon Choi·2020년 6월 16일
0

JPA 프로그래밍

목록 보기
4/4

📌 연관관계 매핑 어노테이션

다대일 (M:1) : @ManyToOne
일대다 (1:M) : @OneToMany
일대일 (1:1) : @OneToOne
다대다 (N:M) : @ManyToMany
조인컬럼 : @JoinColumn
조인테이블 : @JoinTable

📌 단방향 매핑

Member

@Entity
@Getter
@Setter
public class Member {
    @Id @GeneratedValue
    private Long id;

    @Column(name = "USERNAME")
    private String name;

    private  int age;

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

Team

@Entity
@Getter
@Setter
public class Team {

    @Id  @GeneratedValue
    private Long id;

    private String name;
}

Main

public class Main {
    public static void main(String args[]){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        try {
            Team team = new Team();
            team.setName("TeamA");
            em.persist(team);

            Member member = new Member();
            member.setName("member1");
            member.setTeam(team);
            em.persist(member);

            // 조회
            Member findMember = em.find(Member.class, member.getId());

            //참조를 사용해 연관관계 조회
            Team findTeam = findMember.getTeam();

            Team teamB = new Team();
            teamB.setName("TeamB");

            member.setTeam(teamB);

            tx.commit();
        } catch(Exception e){
            tx.rollback();
        }finally {
            em.close();
        }
        emf.close();

        emf.close();
    }
}

📌 양방향 매핑

Member

@Entity
@Getter
@Setter
public class Member {
    @Id @GeneratedValue
    private Long id;

    @Column(name = "USERNAME")
    private String name;

    private  int age;

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

Team

@Entity
@Getter
@Setter
public class Team {

    @Id  @GeneratedValue
    private Long id;

    private String name;
    
    @OneToMany(mappedBy="team")
    List<Member> members = new ArrayList<Member>();
}

Main

public class Main {
    public static void main(String args[]){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");

        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        try {
            Team team = new Team();
            team.setName("TeamA");
            em.persist(team);

            Member member = new Member();
            member.setName("member1");
            member.setTeam(team);
            em.persist(member);

            // 조회
            Member findMember = em.find(Member.class, member.getId());

            //참조를 사용해 연관관계 조회
            Team findTeam = findMember.getTeam();

            Team teamB = new Team();
            teamB.setName("TeamB");

            member.setTeam(teamB);

            tx.commit();
        } catch(Exception e){
            tx.rollback();
        }finally {
            em.close();
        }
        emf.close();

        emf.close();
    }
}
profile
https://github.com/devAon 찰나의 개발흔적을 남기는 개발블로그 입니다 🐥 https://aonee.tistory.com 에서 Velog로 블로그 이전 작업중입니다 ! 🎶

0개의 댓글