@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_type_id", nullable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private UserType userType;
private String email;
private String phoneNumber;
private String name;
private String profilePicture;
private String birthday;
private String password;
private Boolean isReceivedNotification;
private String refreshToken;
@Builder
public Member(Long id, UserType userType, String email, String phoneNumber, String name, String profilePicture, String birthday, String password, Boolean isReceivedNotification, String refreshToken) {
this.id = id;
this.userType = userType;
this.email = email;
this.phoneNumber = phoneNumber;
this.name = name;
this.profilePicture = profilePicture;
this.birthday = birthday;
this.password = password;
this.isReceivedNotification = isReceivedNotification;
this.refreshToken = refreshToken;
}
}
spring boot에서 member entity를 작성해주고, 아래처럼 builder를 사용해서 멤버 객체를 생성하려고 하는데 builder가 활성화가 되지 않는 문제점이 있었습니다.
Member.builder()
인터넷을 검색해보았을 때, builder 어노테이션과 noArgsConstructor를 동시에 사용하면 AllArgsConstructor가 생성되지 않아서 에러가 발생한다는 글을 많이 보았습니다. builder 어노테이션을 사용하면 기존 생성자가 없는 경우에는 AllArgsConstructor를 생성하고, 있는 경우에는 해당 생성자를 사용한다고 합니다. 그런데, noArgsConstructor와 함께 사용하게 되면 noArgsConstructor가 먼저 생성되게 되고, 그렇게 되면 builder는 이미 생성자가 있기 때문에 AllArgsConstructor를 생성하지 않게 됩니다. 그러나, builder를 사용하기 위해서는 AllArgsConstructor가 필요하나 noArgsConstructor밖에 없기 때문에 에러가 발생합니다.
그러나, 저의 경우 빌더 어노테이션과 noArgsConstructor을 동시에 사용하긴 했으나 빌더 어노테이션을 클래스 레벨에 단게 아니라 따로 AllArgsConstructor 생성 후 빌더 어노테이션을 달아 주었기 때문에 위의 경우에 해당하지 않았습니다.
조금 더 검색을 해보니, 인텔리제이에 plugin을 추가해야 한다는 글을 보았습니다. 이걸 보고, settings -> plugins에서 lombok이 설치되어 있는지 확인해보니 설치되어 있지 않았습니다. 해당 plugin을 설치해주니 정상적으로 builder가 인식되었습니다.
#요약!
만약 builder가 동작하지 않는다면 아래 사항들을 확인해보자!!
1. @builder와 @NoArgsConstructor를 클래스 레벨에서 동시에 사용했는지 확인해보기! 만약 클레스 레벨에서 동시에 사용하였다면 위 member 엔티티 예제처럼 따로 AllArgsConstructor를 생성 후에 @builder를 달아주자!
2. lombok plugin을 설치하였는지 확인해보기(settings -> plugins) 만약 설치되어 있지 않다면 설치해주자!
'spring' 카테고리의 다른 글
spring security 403 forbidden (0) | 2024.03.16 |
---|