본문 바로가기

전체 글60

연관관계 - @ManyToOne JPA에서는 DB 테이블 간 관계를 매핑하기 위한 어노테이션들을 지원한다 이 페이지에서는 N:1 관계를 매핑하는 @ManyToOne 어노테이션에 대해 알아보겠다 N:1 관계는 다음과 같이 DB와 Entity로 표현될 수 있다 DB JPA 연관관계의 주인 N:1 관계에서 N의 관계에 있는 Employee의 department가 연관관계의 주인이 된다 양방향 연관관계 적용 N:1 관계에서 1의 관계에 있는 Department의 employees에 mappedBy 속성을 추가해준다 2023. 3. 17.
Builder 패턴 사용 시 주의점 필드에 직접 리스트 초기화 불가 @Builder @Data public class Department{ private String deptName; private User chief; private List employees = new ArrayList(); } 업무 중에 위 코드의 경우와 같이 employees에 null값이 들어가는 것을 방지하기 위해 빈 List를 초기화하였다 단순하게 봤을 때 employees에 null이 아닌, 빈 List가 들어갈 것으로 보인다 하지만, 실제로는 빈 List가 아닌 null값이 들어가 있었다 employees가 초기화되지 않은 것이다 당시에 Builder패턴을 써서 객체를 생성하고 있었는데 디버깅을 하는 도중에 Builder 패턴을 써서 객체를 생성하지 않고 생.. 2023. 3. 16.
양방향 연관관계 주의점 양방향 관계는 테이블에서 외래키를 이용하여 양쪽 테이블에 접근하는 것처럼 양쪽 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.