-
최종 프로젝트 개발2엘리스트랙 2024. 4. 28. 14:20728x90
이제 모임을 생성하기 위해 엔티티를 만들어주자
@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