@ManyToMany에 관련된 질문입니다.
456
投稿した質問数 7
안녕하세요. 백기선님의 강의를 실습해보면서 소모임이라는 웹 프로젝트를 따로 만들어 보는 중입니다.
강의에 해당하는 스터디 만들기를 실행했을 때

NullPointerException이 발생했고 제일 먼저 강의에서는 Study에 해당하는 엔티티인 Society엔티티의 addManager에서 에러가 발생했다는것은 알았는데 디버깅을 해보니

Society엔티티에서 managers에 new HashSet<>();으로 초기화를 했음에도 불구하고 null이 나왔습니다.
디버깅을 더 진행하였더니

TargetException으로 넘어갔는데 여기서부터 어떻게 해결해야 할지 모르겠습니다.
아래는 Society 엔티티이고 분명히 @ManyToMany의 연관관계를 맺은 부분에 new HashSet으로 초기화를 시켰는데 초기화되지 않고 null이 되는지 궁금합니다.
package me.weekbelt.runningflex.modules.society;
import lombok.*;
import me.weekbelt.runningflex.modules.account.Account;
import me.weekbelt.runningflex.modules.account.UserAccount;
import me.weekbelt.runningflex.modules.tag.Tag;
import me.weekbelt.runningflex.modules.zone.Zone;
import javax.persistence.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.Set;
@Builder @AllArgsConstructor @NoArgsConstructor
@Getter @EqualsAndHashCode(of = "id")
@Entity
public class Society {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToMany
private Set<Account> managers = new HashSet<>();
@ManyToMany
private Set<Account> members = new HashSet<>();
@Column(unique = true)
private String path;
private String title;
private String shortDescription;
@Lob @Basic(fetch = FetchType.EAGER)
private String fullDescription;
@Lob @Basic(fetch = FetchType.EAGER)
private String image;
@ManyToMany
private Set<Tag> tags = new HashSet<>();
@ManyToMany
private Set<Zone> zones = new HashSet<>();
private LocalDateTime publishedDateTime;
private LocalDateTime closedDateTime;
private LocalDateTime recruitingUpdatedDateTime;
private boolean recruiting;
private boolean published;
private boolean closed;
private boolean useBanner;
public String getEncodedPath() {
return URLEncoder.encode(this.path, StandardCharsets.UTF_8);
}
public void addManager(Account account) {
this.managers.add(account);
}
public boolean isJoinable(UserAccount userAccount) {
Account account = userAccount.getAccount();
return this.isPublished() && this.isRecruiting()
&& !this.members.contains(account)
&& !this.managers.contains(account);
}
public boolean isMember(UserAccount userAccount) {
return this.members.contains(userAccount.getAccount());
}
public boolean isManager(UserAccount userAccount) {
return this.managers.contains(userAccount.getAccount());
}
}
回答 4
0
감사합니다! 해결했습니다. 클래스전체에 @Builder를 적용하지않고 엔티티에 따로 생성자를 만들어 @ManyToMany처럼 연관관계를 제외한 부분만 빌더 패턴으로 받을수 있게 했습니다.
0
@Builder.Default 를 사용해서 빌더 사용시 기본값을 설정할 수도 있긴 합니다.
@Builder.Default private final long created = System.currentTimeMillis();
이런식으로요.
https://projectlombok.org/features/Builder
참고하세요.
0
맞습니다. Setter를 쓰지 않기위해서 빌더를 써서 만들었는데 그렇다면 Setter를 사용하여 modelMapper를 이용해 바인딩해서 만드는 방법밖에 없는건가요?
@PostMapping("/new-society")
public String newSocietySubmit(@CurrentAccount Account account,
@Valid SocietyForm societyForm, Errors errors,
Model model) {
if (errors.hasErrors()) {
model.addAttribute("account", account);
return "society/form";
}
Society newSociety = Society.builder()
.path(societyForm.getPath())
.title(societyForm.getTitle())
.shortDescription(societyForm.getShortDescription())
.fullDescription(societyForm.getFullDescription())
.build();
Society society = societyService.createNewSociety(newSociety, account);
return "redirect:/society/" + society.getEncodedPath();
}
Study 개설하는 로직에 대해서 궁금점이 있습니다.
0
55
1
앱 재시작 후 회원가입
0
101
1
app.host 관련 질문이 있습니다
0
97
1
강의 버전 정보
0
125
1
event, study 참조
0
218
2
비밀번호 변경 로직 질문있습니다.
0
135
1
프로필 수정 처리 merge 질문입니다.
0
106
1
회원가입 성공 후 redirect이동시 권한 질문
0
490
3
HtmlEmailService 개발하다 생긴 의문입니다
0
248
2
postgreSql 연결하여 JPA 를 통해 테이블 생성시 ZONE 테이블 생성에서 에러가 납니다
0
429
2
수업질문 [긴급] 로그인안되는 문제 말씀해주시는 부분 반영해서 최종 질문드립니다
0
259
2
[긴급-재업로드]수업질문 로그인 안 되는 문제
0
235
1
[긴급] 로그인해도 네비게이션 바가 안 바뀌고 있습니다!! 로그인이 안 됩니다 도와주세요
0
277
1
cropper 오류 문제로 질문드립니다..
0
285
2
authentication관련 질문...
0
495
2
모임참가 취소 할때 로직 질문
0
350
3
안녕하세요 기선님 질문이있습니다..
0
229
1
HTML코드 및 강의 중간자료들
0
679
3
springSecurity
0
519
2
버전 질문입니다.
0
300
1
부트스트랩, css
0
352
2
영속성 컨텍스트 질문
0
248
2
다시 강의를 보니 드는생각..
0
350
2
5:50에 나오는 HTML코드는 어디서 찾을 수 있나여?
0
312
1

