package study.querydsl.entity;
import jakarta.persistence.*;
import lombok.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString(of = {"id","name"})
public class Team {
@Id
@GeneratedValue
@Column(name = "team_id")
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
}
분명 members리스트를 초기화해줬는데, team.getMembers()가 NULL이라 NullPointerException가 발생했다.
Cannot invoke "java.util.List.add(Object)" because the return value of "study.querydsl.entity.Team.getMembers()" is null java.lang.NullPointerException: Cannot invoke "java.util.List.add(Object)" because the return value of "study.querydsl.entity.Team.getMembers()" is null |
문제는 빌더패턴을 이용한 객체 생성이었다.
나는 빌더패턴고자라 어떻게 돌아가는지는 잘모르고 그냥 사용했었다.
이러다가 오류낫죠. 헤헷
결론만 말하자면 빌더패턴을 이용하면 필드에 초기화해놓은 값은 사용되지 않기 때문에 NPE가 발생하는 것이라고 한다.
자세한건 디버깅을 해보자. 나중에 해볼게요.
해결! 초기화 해놓은 값을 사용하도록 @Builder.Default를 사용하자.
package study.querydsl.entity;
import jakarta.persistence.*;
import lombok.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString(of = {"id","name"})
public class Team {
@Id
@GeneratedValue
@Column(name = "team_id")
private Long id;
private String name;
@OneToMany(mappedBy = "team")
@Builder.Default
private List<Member> members = new ArrayList<>();
}
https://bbeomgeun.tistory.com/174
'Error' 카테고리의 다른 글
springboot Could not move temporary workspace 오류 (0) | 2024.05.01 |
---|---|
pull 했는데 FETCH_HEAD warning: skipped previously applied commit (0) | 2024.04.11 |
application.yaml 설정- org.hibernate.sql 작동 안함 (0) | 2024.01.09 |
Git "There is no tracking information for the current branch. Please specify which branch you want to merge with. "오류 (0) | 2024.01.09 |
git push author 변경 (0) | 2023.09.04 |