ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 최종 프로젝트 개발2
    엘리스트랙 2024. 4. 28. 14:20
    728x90

     

     

     

     

     

     

    이제 모임을 생성하기 위해 엔티티를 만들어주자

     

     

    @Entity
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Setter
    @Getter
    public class Meeting extends BaseEntity {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
        @NotBlank(message = "모임 이름을 입력하세요.")
        private String meetingName;
        private String mountainName;
        @NotBlank(message = "상세 설명을 입력하세요.")
        private String description;
        @NotNull(message = "인원 수를 입력하세요.")
        private int headcount;
        @NotNull(message = "날짜를 입력하세요.")
        private LocalDate date;
        private String image;
    
        @ManyToOne(fetch = FetchType.LAZY)
        private User leader;
    
        @OneToMany(mappedBy = "meeting", cascade = CascadeType.ALL, orphanRemoval = true)
        @JsonManagedReference("meeting-meetingTag")
        private Set<MeetingTag> meetingTags = new HashSet<>();
    
        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name = "category_name")
        private Category category;
    
        @OneToMany(mappedBy = "meeting", cascade = CascadeType.ALL, orphanRemoval = true)
        private List<Participant> participant;
    
    
    }

     

     

    모임을 생성할 때 카테고리, 해시태그, 모임 참가자 목록도 필요해서 매핑을 해주었고 생각할 게 많았다.

     

    public MeetingResponseDto createMeeting(MeetingDto meetingDto){
            // dto에서 불러온 카테고리명으로 카테고리를 가져옴
            Category category = categoryRepository.findByName(meetingDto.getCategoryName())
                    .orElseThrow(() -> new ServiceLogicException(ExceptionCode.CATEGORY_NOT_FOUND));
            // 현재 로그인 한 유저를 불러옴
            User leader = userRepository.findByEmail(meetingDto.getUserEmail())
                    .orElseThrow(() -> new ServiceLogicException(ExceptionCode.USER_NOT_FOUND));
    
    
            Meeting meeting = Meeting.builder()
                    .meetingName(meetingDto.getMeetingName())
                    .category(category)
                    .mountainName(meetingDto.getMountainName())
                    .description(meetingDto.getDescription())
                    .headcount(meetingDto.getHeadcount())
                    .date(meetingDto.getDate())
                    .image(meetingDto.getImage())
                    .build();
    
            meetingRepository.save(meeting);
    
            Set<MeetingTag> meetingTags = new HashSet<>();
            // dto에 있는 해시태그에서 생성되지 않은 해시태그면 생성해주고 생성되어 있으면 가져옴
            for (String tagName : meetingDto.getTags()) {
                Tag tag = tagRepository.findByName(tagName)
                        .orElseGet(() -> tagRepository.save(Tag.builder()
                                .name(tagName)
                                .build()));
                MeetingTag meetingTag = MeetingTag.builder()
                        .tag(tag)
                        .meeting(meeting)
                        .build();
                meetingTags.add(meetingTagRepository.save(meetingTag));
            }
    
            meeting.setMeetingTags(meetingTags);
    
            meetingRepository.save(meeting);
            // 모임장을 참가자 목록에 추가해줌
            Participant participant = Participant.builder()
                    .user(leader)
                    .meeting(meeting)
                    .isLeader(true)
                    .build();
            List<Participant> participants = new ArrayList<>();
            participants.add(participantRepository.save(participant));
    
            meeting.setParticipant(participants);
    
            return convertToDto(meetingRepository.save(meeting));
    
        }

     

     

    근데 모임이 계속 생성되지 않아서 애를 먹었었다.

     

    java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups (description,group_name,headcount,leader_id,mountain_name) values ('북�' at line 1

     

    이런 식으로 에러가 계속 생겨 뭐가 문제인가 찾아봤는데 처음에는 모임의 엔티티를 group으로 해두어서 JPA 생성 중에 예약어 에러가 뜬 것이었다. 그래서 group으로 되어있는 이름들을 모두 meeting으로 변경해 주니 실행이 잘 되었다.

     

     

    728x90

    '엘리스트랙' 카테고리의 다른 글

    최종 프로젝트 개발4  (0) 2024.05.05
    최종 프로젝트 개발3  (1) 2024.04.28
    최종 프로젝트 개발1  (0) 2024.04.28
    최종 프로젝트 api 문서 작성!  (0) 2024.04.21
    최종 프로젝트 배포!  (1) 2024.04.21
Designed by Tistory.