본문 바로가기

Spring42

양방향 연관관계 주의점 양방향 관계는 테이블에서 외래키를 이용하여 양쪽 테이블에 접근하는 것처럼 양쪽 Entity에 서로의 참조값을 갖고 있게 함으로써 양방향으로 Entity에 접근을 가능하게 한다 다만, 양쪽 Entity에 서로의 참조값을 갖고 있어서 주의할 점이 몇가지 있는데 아래와 같이 1:N의 관계를 가진 Entity를 예시로 들어서 설명하겠다 mappedBy가 위치한 곳은 읽기 전용이다 연관관계의 주인인 곳에서만 참조값을 변경할 수 있다 연관관계의 주인이 아닌 쪽의 값을 변경하더라도 읽기 전용이기 때문에 DB에 반영되지 않는다 양쪽에 값을 넣어주자 아래 코드를 살펴보자 위 코드에서는 연관관계의 주인인 쪽에만 참조값을 저장하고 있다 여기서 한가지 문제가 있다. 객체지향적인 관점에서 봤을 때, Employee에서는 Dep.. 2023. 3. 15.
양방향 연관관계 - 연관관계의 주인 '연관관계의 주인'개념을 이해해기 위해서는 DB와 JPA에서의 외래키 관리방법의 차이점에 대해서 알아야 한다 예를 들어, Department와 Employee라는 테이블이 있다고 치자 Department와 Employee는 1:N의 관계이다 외래키 관리방법의 차이점 DB DB의 경우에는 N의 관계에 있는 Department에 외래키를 저장하여 관리한다 Department에 저장된 외래키 하나로 양방향 접근이 가능하다 JPA JPA의 경우 양방향 접근이 가능하려면 Department와 Employee 양 쪽 모두에 서로의 참조값이 있어야 한다 DB의 경우에는 외래키(참조값)를 한 쪽에서만 저장하고 있어서 외래키(참조값)를 관리하는 주체가 명확하다 -> N의 관계에 있는 테이블의 컬럼에 외래키를 저장하고 관.. 2023. 3. 12.
연관관계 - 양방향 연관관계(기본 컨셉) 단방향 연관관계에서는 1:N의 관계에서 'N'에 해당하는 Entity에 @JoinColumn 애너테이션을 이용하여 단방향 연관관계를 표현하였다. 단방향 연관관계는 한계가 존재하는데, 한 쪽 방향으로만 데이터를 조회할 수 있다 아래와 같은 테이블이 있다고 치자 관계형DB에서는 외래키인 DEPT_ID를 이용하여 Employee와 Department 양 쪽 모두 조회가능하다 하지만, 위 테이블과 매핑되는 Entity를 보자. 보기 쉽게 표현하면 아래와 같은 그림이 될 것이다 위 Entity의 경우, Employee에서는 Department 객체의 참조값을 이용해서 Department 데이터를 조회가능하지만, Department에서는 Employee의 참조값이 존재하지 않으로 Employee 조회가 불가능하다 .. 2023. 3. 7.
연관관계 - 단방향 연관관계 이 페이지에서는 JPA에서 테이블 간 관계를 어떻게 표현하는지 알아보도록 하겠다 아래와 같이 Department(부서)와 Employee(직원) 테이블이 있다고 치자. 위 테이블 간 관계를 그대로 Entity로 표현하면 아래와 같이 표현할 수 있다. Employee @Entity public class Employee{ /** 직원 id */ @Id @Column(name="EMPLOYEE_ID") private Long id; /** 직원 이름 */ private String name; /** 직원 나이 */ private Integer age; /** 부서 id */ private Long departmentId; } Department @Entity public class Department{ /*.. 2023. 2. 28.