본문 바로가기

dev/JPA

Spring Boot JPA Join

스프링 부트에서 JPA를 통해 테이블 join을 구현하는 것은 DB 외래키로 하는 것과 많이 다릅니다.

 

DB는 외래키 하나로 테이블 양방향 참조가 가능하지만 JPA는 테이블을 객체로 매핑하기 때문에 추가로 작업을 해야 합니다.

 

직원 테이블

 

출퇴근 테이블

 

 

예제로 만든 직원 테이블과 출퇴근 테이블입니다.

 

출퇴근 테이블의 employee_id 컬럼이 직원 테이블의 id 컬럼을 참조하고 있습니다.

 

출퇴근 테이블과 직원 테이블은 다대일 양방향 관계이기 때문에

 

출퇴근 테이블이 참조키를 가지고 있고 연관관계의 주인입니다.

 

출퇴근 엔티티 클래스

 

출퇴근 엔티티 클래스가 외래키 필드를 가지고 있고, 연관관계 주인임을 나타내고 있습니다.(32~35라인)

 

출퇴근 엔티티와 직원 엔티티는 서로 참조할 수 있도록 연관관계 편의 메소드 setEmployee를 작성합니다.(53~60라인)

 

setEmployee 메소드는 현재 출퇴근 엔티티가 참조하고 있는 직원 엔티티가 변경되는 경우

 

출퇴근 엔티티가 참조하고 있는 직원 엔티티를 변경하고(58라인)

 

직원 엔티티가 참조하고 있는 출퇴근을 변경합니다.(54~56라인, 59라인)

 

직원 엔티티 클래스

 

직원 엔티티 클래스는 mappedBy 속성을 통해서 연관관계 주인이 아님을 나타냅니다.(51~53라인)

 

mappedBy 속성값은 연관관계 주인 출퇴근 엔티티 클래스의 외래키 필드명입니다.

 

출퇴근 엔티티 조회

 

QueryDSL로 출퇴근 엔티티와 직원 엔티티를 join 해서 List로 리턴합니다.

 

이 List는 RestController로 전달되어 json으로 표출합니다.

 

json 조회 화면

 

join 조회가 정상적으로 된 것을 확인할 수 있습니다.

'dev > JPA' 카테고리의 다른 글

JPA Infinite Recursion 예외 처리  (0) 2023.08.29
Spring Boot JPA QueryDSL  (0) 2023.08.29
Spring Boot JPA ID IDENTITY  (0) 2023.08.28
Spring Boot JPA 복합키  (0) 2023.08.24
Spring Boot Data JPA  (0) 2023.02.03