인프런 커뮤니티 질문&답변

H K님의 프로필 이미지

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

모임 참가 신청 및 취소

모임참가 취소 할때 로직 질문

24.03.23 19:22 작성

·

198

·

수정됨

0

안녕하세요

이부분에서 event.removeEnrollment(enrollment);
이 메서드를 타고 들어가면

이 메서드가 실행되는데 이때 106라인
->enrollment.setEvent(null);
이 코드는 꼭 필요 한건가요 ??

첫번째 사진 보시면 어차피

enrollmentRepository.delete(enrollment);
이걸 실행 하는데 왜 있는건지 이해가 잘 안갑니다 !

 

 

=================두번째 질문===========

이 부분에서 취소를 하면 대기하던사람이 자동 확정 하는 로직인데

대기 하던 사람들 중 제일 먼저 신청을 해놓은 사람들을

정렬해서 true 처리 해야하는데 이건 안되있는거 아닌가요 !!?

 

 

답변 2

0

백기선님의 프로필 이미지
백기선
지식공유자

2024. 07. 02. 00:47

두번째 질문은 말씀하신대로 로직이 비어있거나 버그 같네요.

첫번째 질문에서 106번 라인의 코드는 연관 관계를 관리하는 목적으로 해당 코드가 반드시 caencelEnrollment에서만 사용될 거라면 필요 없을 수도 있겠지만, 그런 경우라면 오히려 106번 코드만 삭제하는게 아니라 removeEnrollment를 없애는게 좋겠네요.

0

인프런 AI 인턴님의 프로필 이미지

2024. 03. 25. 19:27

안녕하세요, 인프런 AI 인턴입니다.

첫 번째 질문에 대한 답변입니다. enrollment.setEvent(null); 코드는 EnrollmentEvent 사이의 연관관계를 제거하는 데 필요합니다. JPA를 사용할 때, 양방향 연관관계가 있는 경우 양쪽 모두에서 연관관계를 정리해주어야 합니다. 즉, Enrollment 엔티티를 삭제하기 전에 Event와의 연관관계를 끊어주는 것이 JPA에서 엔티티의 일관된 상태를 유지하는 데 중요합니다. 따라서 enrollment.setEvent(null); 코드는 필요한 부분입니다.

두 번째 질문에 관해서, 대기 중인 Enrollment 목록을 순서대로 처리하는 로직이 필요하다는 말씀이 맞습니다. 이미지 속 코드만으로는 대기 목록이 어떤 기준으로 정렬되어 있는지, 혹은 정렬 로직이 없는지 확인하기 어렵습니다. 도메인 로직 상에서 대기 목록이 시간 순 또는 다른 기준에 따라 정렬되어 있다고 가정한 상태에서 첫 번째 대기 Enrollment을 활성화(accepted 상태를 true로 변경)하는 것으로 보입니다. 대기 목록(enrollments)이 적절한 순서대로 정렬되어 관리되어야 이 로직이 의도대로 작동할 것입니다. 이 부분은 코드의 다른 부분에서 정렬 로직을 구현하거나, Enrollment을 추가할 때 정렬 상태를 유지하는 방식으로 해결할 수 있습니다.

H K님의 프로필 이미지
H K
질문자

2024. 03. 25. 23:52

첫번째 답변에서 연관관계를 제거하는 데 필요한건 인지하고 있었습니다

그런데 어차피 enrollmentRepository.delete(enrollment); 이 코드가 있으니까

생략해도 되는거 아닌가요?

H K님의 프로필 이미지

작성한 질문수

질문하기