현제의 현재이야기
[spring] FetchType에 대하여 본문
package com.example.domain.domain;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import java.net.URL;
@Entity
@Getter @Setter
@NoArgsConstructor
public class Result {
@Id @GeneratedValue
@Column(name = "result_id")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "question_id")
private Question question;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;
@Enumerated(EnumType.STRING)
private AnswerStatus answerStatus;
private String audio;
public static Result createResult(Question question, Member member, String audio) {
Result result = new Result();
result.setQuestion(question);
result.setMember(member);
result.setAudio(audio);
result.setAnswerStatus(AnswerStatus.WAITING);
return result;
}
}
- 영환님이 ManyToOne이나 OneToOne을 할 때, fetch 전략을 LAZY로 해야 호율적이라고 하셨다.
- 왜냐하면 Result 엔티티가 Question 엔티티와 많은 관계를 가지고 있다면, 모든 Result를 검색할 때마다 모든 Question을 가져오기 때문이다.
- 그런데 문제점이 발생했다.
- 여기서 LAZY 때문에 member가 로드되지 않고 직렬화를 시도하면 .. 어떤 hibernate 프록시 개체가 반환되는 오류라고 한다.
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
- 그래서 이걸 넣으면 LAZY 로딩 전략도 지키고 직렬화도 가능하단다.
package com.example.domain.controller;
import com.example.domain.domain.Result;
import com.example.domain.service.ResultService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequiredArgsConstructor
public class ResultController {
private final ResultService resultService;
@GetMapping("/result/{memberId}")
public ResponseEntity<List<Result>> getResultsByMemberId(@PathVariable Long memberId) {
List<Result> results = resultService.findResult(memberId);
return ResponseEntity.ok().body(results);
}
}
'JAVA' 카테고리의 다른 글
[Spring] Json에 포함되는 필드 (0) | 2023.04.14 |
---|---|
[Spring] null 값 처리와 HTTP response (0) | 2023.04.07 |
[JAVA SPRING] 0314 TIL (0) | 2023.03.14 |
[JAVA] JAVA Static과 Python global과의 차이점 (0) | 2023.03.10 |
기초문법 1일차 (0) | 2023.03.08 |
Comments