작성
·
58
0
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (아니오)
[질문 내용]
Lazy 강제 초기화 시, order.getMember().getName() 는
@GetMapping("/api/v1/orders")
public List<Order> listV1() {
List<Order> orders = orderRepository.findAll(new OrderSearch());
for (Order order : orders) {
order.getMember().getName();
...
}
return orders;
}
다음과 같은 결과를 기대합니다.
{
"id": 1,
"member":{
"name": "memberA",
},
...
}
하지만 order.getMember() 까지만 초기화 되어, 다음과 같은 결과가 나옵니다.
{
"id": 1,
"member":{
"id": 1,
"name": "memberA",
"address":{
"city": "주소",
"street": "거리",
"zipcode": "우편번호"
}
},
...
}
Intelij 에서도 'Member. getName()'의 결과가 무시되었습니다
라고 에러가 뜨는데 그 이유가 궁금합니다.
답변 2
0
안녕하세요. 김용기님, 공식 서포터즈 코즈위버입니다.
인텔리제이 메시지의 경우 이 코드로 조회한 값을 아무곳에서도 사용하지 않기에 출력되는 것으로 보입니다.
...
order.getMember().getName();
...
JSON 결과는 List<Member> 에 대한 내용전체가 출력되게 됩니다.
만약 결과값을 변경하시고 싶은 경우 List<String> names 등을 생성하시고 이 names 를 반환하도록 코드를 변경하셔야 합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 김용기님.
질문해주신 내용과 관련하여 비슷한 문제를 다룬 기존 답변들을 찾았습니다. 우선 강제 초기화와 관련된 내용은 아래 링크를 참고하시기 바랍니다:
HttpMessageNotWritableException
오류가 발생할 수 있으며, 페치 전략을 EAGER
로 변경하거나 JPQL을 사용하여 이를 해결할 수 있습니다.추가적으로, Intellij 에러 메시지 'Member.getName()'의 결과가 무시되었습니다
와 관련해서는 프록시 초기화가 필요할 때 정확하게 초기화 코드가 실행되지 않아서 발생할 수 있습니다. 이를 확인하고 해결하기 위해 아래 사항을 체크해보세요:
- 코드가 정확하게 초기화를 수행하고 있는지(가능하면 브레이크포인트를 통해 디버깅).
- Hibernate5Module이 제대로 설정되어 있는지 확인.
- 영속성 컨텍스트가 열려 있는 상태에서(보통 트랜잭션 내) 초기화 코드를 실행하고 있는지 확인.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.