작성
·
384
0
public List<Chat> findChatsByRoomId(Long roomId) {
return em.createQuery("select c from Chat c join c.room r where r.id = c.room.id and r.id = :roomId", Chat.class)
.setParameter("roomId", roomId)
.getResultList();
}
// 채팅방 입장 화면
@GetMapping("/room/{roomId}")
public String roomDetail(Model model,
@PathVariable Long roomId,
@Login Member loginMember) {
List<Chat> chatList = chatService.loadChat(roomId);
Room room = roomService.findRoom(roomId);
model.addAttribute("loginMember", loginMember.getName());
model.addAttribute("loginMemberId", loginMember.getId());
model.addAttribute("room", room);
model.addAttribute("chatList", chatList); // 여기서 에러
return "chats/room";
}
답변 3
0
@JsonManagedReference, @JsonManagedRefernece 어노테이션 해결법보다,
엔티티 대신 DTO를 반환하라는 정보가 많아 가지고 해보고있습니다.
Service단에서 DTO를 반환해서 -> Controller에 넘겨주고 그걸로 화면(model)에 담아주면 되는걸로 이해하고 있는데 맞나요?..
이게 맞으면 ... 이방법으로는 해결이 안되네요
제가 잘못 접근하고 있는부분이있나여?
- Service
public List<ChatDto> loadChat (Long roomId) {
List<Chat> chatEntities = chatRepository.findChatsByRoomId(roomId);
List<ChatDto> chatList = ChatsMapper.INSTANCE.toDoList(chatEntities);
return chatList;
}
da
- Controller
// 채팅방 입장 화면
@GetMapping("/room/{roomId}")
public String roomDetail(Model model,
@PathVariable Long roomId,
@Login Member loginMember) {
List<ChatDto> chatList = chatService.loadChat(roomId);
model.addAttribute("chatList", chatList);
return "chats/room";
}
code:https://github.com/jin0kim326/pingpong
0
안녕하세요. 김진영님, 공식 서포터즈 OMG입니다.
- Chat class의 @ToString을 제거하고 시도해주세요.
안될 경우 아래의 링크에서와 같이
@JsonManagedReference, @JsonManagedReference 를 사용
혹은 엔티티 대신 DTO를 반환하여 확인해주세요.
[Spring Boot] JPA - 순환 참조 해결하기 (velog.io)
JPA 양방향 Entity 무한재귀 문제해결 (thxwelchs.github.io)
양방향 연관관계 순환참조 관련하여 JPA 활용2편을 참고해주세요.
감사합니다.