항해99 TIL 4주차 - 23

강민범·2023년 11월 13일
0

과제의 기능 구현중 대출내역조회 기능 에서
jpa 연관관계 매핑 애너테이션을 사용하지않고 특정 회원을 조회했을때 이력내역이 나오게하는것이였고 loan 테이블에 있는 값이 아닌 user테이블,book테이블에 있는 값을 조인해서 가져오는것이였다.

dto를 따로 만들어서 필요한 필드값을 넣어주고 생성자를 생성해서 만들어줬어야 했는데 dto 만드것을 생각하지 못해 계속 헤매고있었다.

package com.example.library.dto;

import lombok.*;

import java.time.LocalDateTime;

@Data
public class LoanJoinDto {
    private String username;
    private String phoneNumber;
    private String title;
    private String author;
    private LocalDateTime loanDate;

    public LoanJoinDto(String username, String phoneNumber, String title, String author, LocalDateTime loanDate) {
        this.username = username;
        this.phoneNumber = phoneNumber;
        this.title = title;
        this.author = author;
        this.loanDate = loanDate;
    }
}

그리고 LoanRepository에서 jpa에서 조인관계를 구하기위해서 제공하는 @sql 애너테이션을 이용하면 쿼리문을 직접 작성해 해결 할 수 있었다.

   @Query("select new com.example.library.dto.LoanJoinDto(m.username, m.phoneNumber, b.title, b.author, l.loanDate) from Loan as l, Member as m, Book as b where l.loanId = :userId and l.loanId = b.bookId order by l.loanDate")
    List<LoanJoinDto> loanJoin(@Param("userId") Long userId);
profile
개발자 성장일기

0개의 댓글