//ChatRoomService
ChatRoom chatRoom = ChatRoom.builder().chatRoomName(user.getName()+"님의 방").build();//id userchatRoomList name
User userEntity = userService.findUser(user.getEmail());
UserChatRoom userChatRoom = UserChatRoom.builder().user(userEntity).chatRoom(chatRoom).build();//오류부분
userEntity.addUserChatRoom(userChatRoom);
chatRoom.addUserChatRoom(userChatRoom);
return chatRoomRepository.save(chatRoom);
해당 서비스 로직에서 NullpointerException이 자꾸 뜨길래
오류 내용은 chatRoom.addUserChatRoom(userChatRoom)에서 생겼다.
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
@ToString
public class ChatRoom extends Audtiable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "chatRoom", cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
private List<UserChatRoom> userChatRoomList = new ArrayList<>();
private String chatRoomName;
@Builder
public ChatRoom(Long id, List<UserChatRoom> userChatRoomList, String chatRoomName) {
this.id = id;
this.chatRoomName = chatRoomName;
this.userChatRoomList = userChatRoomList;
}
public void addUserChatRoom(UserChatRoom userChatRoom){
this.userChatRoomList.add(userChatRoom);
if (userChatRoom.getChatRoom() != this){
userChatRoom.addChatRoom(this);
}
}
}
한시간 가량 팀원과 생각하고 하나하나 뜯어보다가 문제점을 발견하였다.
- 무분별한 객체 생성을 막기 위해 @NoargsConstructor(AccessLevel.PROTECTED)를 사용하였다.
- 클래스 위에 달아 놓은 @Bulder 애노테이션이 문제가 생겼다.
- 해결방법으로 @AllArgsConstructor 위에 @Builder 애노테이션을 옮기면 된다.
그저께 생성패턴을 빌더패턴으로 바꾸면서 아무생각없이 따라하다가 생긴 문제였다.
@AllArgsConstructor 내 매개변수로 List
서비스 로직에서는 userChatRoomLIst를 변수로 주지 않으니 null값으로 들어간거였다.
@Builder
public ChatRoom(Long id, , String chatRoomName) {
this.id = id;
this.userChatRoomList = userChatRoomList;
}
생각을 하면서 코드를 사용해야지...ㅠ
'일기' 카테고리의 다른 글
Flutter 설치하기 (0) | 2023.01.10 |
---|---|
Dart 공부하기_함수형프로그래밍, 비동기 (0) | 2023.01.10 |
Dart 공부하기_ 기본문법,OOP (0) | 2023.01.09 |
"AI와 이야기하기: ChatGPT로 새로운 인공지능을 체험해보자" (3) | 2022.12.17 |