JPA : 일대다 연관관계에서 테이블 생성

     

    JPA 일대다 연관관계 → DB 반영은?

    JPA 일대다 연관관계에서 DB 반영은 어떻게 일어날까? '일대다' 연관관계의 의미처럼 '일'은 테이블에 1개만 저장된다. '다'는 테이블에 여러개가 저장된다. 즉, '일'의 PK를 FK로 가지는 여러 개의 '다'가 만들어지고 각각 저장된다. 아래 예시를 통해 확인해본다.

     


    Member Entity

    @Entity
    @Data
    @ToString(of = "name")
    public class Member {
    
        @Id
        @GeneratedValue
        @Column(name = "member_id")
        private Long id;
    
    
        private String name;
    
    
        @OneToMany(mappedBy = "member", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
        private List<Order> orderList = new ArrayList<>();
    }
    

     

    Order Entity

    @Entity
    @Data
    @ToString(of = "name")
    @Table(name = "orders")
    public class Order {
    
        @Id
        @GeneratedValue
        @Column(name = "order_id")
        private Long id;
    
        @ManyToOne
        @JoinColumn(name = "member_id")
        private Member member;
    
        private String name;
    
    
        public void addMember(Member member) {
            this.member = member;
            member.getOrderList().add(this);
        }
    
    }

     

    테스트 코드 작성

    @Test
    void test1_1() {
        
        // 엔티티 생성
        Member member = new Member();
        Order order1= new Order();
        Order order2 = new Order();
        member.setName("member1");
        order1.setName("order1");
        order2.setName("order2");
    
    
        // 연관관계 편의 메서드 : 서로 추가
        order1.addMember(member);
        order2.addMember(member);
    
        // member 저장
        em.persist(member);
    }

    테스트 코드에서는 "member1"에 "order1", "order2"가 포함된다. 이걸 DB에 저장했을 때 어떻게 저장될까?

     

    결론 : DB 테이블 확인

    DB 테이블 확인하면 일대다 연관관계는 "일"은 1개만 DB 테이블에 만들어진다. 그리고 "다"는 그 갯수만큼 DB 테이블에 만들어진다. 따라서 앞으로 테이블에 어떻게 반영되는지를 쉽게 이해하려면 연관관계가 어떻게 맺어졌는지로 충분히 바로 알 수 있게 된다. 

    댓글

    Designed by JB FACTORY