전체 글 119

[개발] [spring boot] 좋아요 기능 개수 제한하기_성공

🤔전 상황 / 원인분석 전전 글에서 좋아요 개수 제한하기에 성공했다고 했었는데 계속 다양한 경우의 수로 테스트를 해보니 중간에 제대로 List에 add가 안 되거나, 개수가 자기 마음대로 나오는 등 그 코드는 실패한 코드였다. 애초에 DB에 저장하는 게 아니라 그냥 로컬(?)에만 담겨있는 favoriteSchool 변수에 무결성을 유지하면서 잘 작동할 수 있는지도 미지수긴 하다. 🌸해결과정 생각해 보니 반드시 저 정보들은 DB에 있어야 언제든지 변경과 불러오기가 가능할 거 같았다. 개수를 제한하는 것도 그냥 테이블에 있는 유저 id를 조회해서 하나의 유저가 10 이상의 레코드를 가지지 못하게 개수를 세면 될 거 같았다. 🗝️해결 @PostMapping public ResponseDTO addHeart(H..

[개발] 🎁배운점 - Optional 클래스에서 getId() 사용하기

if (school.isPresent() && !user.getFavoriteSchool().contains(school.get())) { School newSchool = new School(); newSchool.setId(school.getId()); // newSchool에 다른 필드가 있다면 해당 필드도 설정해주세요. user.getFavoriteSchools().add(newSchool); } 3번째 줄에서 getId() 함수를 사용할 수 없었다. 그런데 나는 반드시 Id 값을 얻어와야 하는 상황이어서 꼭 해결을 해야 했다. school은 Optional 타입이기 때문에 .get()메서드를 호출하여 School 객체를 얻은 후에 getId()를 호출할 수 있다. 따라서, school.get()..

[개발]🚨ERROR - cannot find symbol(클래스) 에러

🛤️현상 여러 블로그들을 검색해서 각종 방법들을 시도/체크 해보았다. 해당 클래스가 존재하지 않는가? ➡️ NO❌ 해당 클래스를 사용할 때 철자를 틀리게 적었는가? ➡️ NO❌ Build > Rebuild Project 를 시도해보지 않았는가 ? ➡️ NO❌ File > Invalidate Caches... 를 시도해보지 않았는가 ? ➡️ NO❌ 클래스 패스를 정확하게 import 해보지 않았는가 ? ➡️ NO❌ ➡️한마디로 블로그에서 본 방법을 사용해도 해결되지 않았다는 것이다!! (이 문제 때문에 거의 하루동안 다른 개발을 진행할 수 없었다ㅠㅠ) 🗝️해결 프로젝트에서 HeartDTO를 찾지 못해서 발생한 일 같다. 그래서 자포자기하는 심정으로 HeartDTO ➡️ DTO로 클래스 이름을 바꾸니까 He..

[개발]🎁배운점 - @JoinColumn이 없다면??

🛤️현상 나는 userid 필드만 entity 클래스에 선언했지 userid_id는 만든 적도 사용한 적도 없는데 갑자기 DB에서 띠용~하고 나타난 것이다!!! 🤔 🌸과정 분명히 이렇게 된 데에는 이유가 있을 텐데... DB에 저런 식으로 속성이 생성됐다는 것은 entity 클래스에 원인이 있다고 유추할 수 있다. 그래서 검색해보 외래키를 사용하는 칼럼에 @JoinColumn를 사용하지 않아서 발생한 일일 수 있다고 했다. 🗝️해결 참고로 name을 지정할 때는 모두 소문자로 적어주는 것이 좋다고 한다. 일반적으로 데이터베이스에서는 소문자로 구성된 칼럼 이름을 사용하는 것이 일관성을 유지하고 가독성을 높이는 데 도움이 됩니다. 따라서 JPA에서도 칼럼 이름을 소문자로 작성하는 것이 권장되는 관례입니다.

[개발]🚨ERROR - .w.s.m.s.DefaultHandlerExceptionResolver

🛤️현상 2023-06-21 17:09:46.561 WARN 11180 --- [nio-8080-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot construct instance of hanium.highwayspring.school.School (although at least one Creator exists): no int/Int-argument constructor/factory method to deserialize from Number value (1); nested e..

[개발]🚨ERROR - javax.persistence.NonUniqueResultException:

🛤️현상 JPA를 통해서 save 메서드를 수행하는데 이런 오류가 발생했다. list를 가지고 오는 것도 아닌데 유니크하고 말고 가 뭐가 중요한 건지 이해가 안 갔다. 🌸과정 "query did not return a unique result: 7"라는 오류 메시지에서 "7"은 예상했던 유일한 결과가 아닌, 중복된 결과가 반환되었음을 나타냅니다. 여러 번 시도를 할 때마다 뒤에 숫자가 7,11,8 등등으로 저 부분은 숫자가 바뀌는 것을 보아 코드상에 문제가 아니라 DB에 들어간 레코드들이 중복돼서 발생한 것 같다는 느낌이 들었는데 레코드를 확인해 본 테이블이 review, school 테이블이었다. 내용을 삭제해도 달라지는 건 없었다.ㅠㅠ 🗝️해결 user 테이블을 확인해보니 핑크색 id 값을 빼고 나머..

[개발]🎁배운점 - ifPresent() 메서드

Optional entity = repository.findById(id); 이러한 코드의 다음 줄에 entity.setContent를 사용하고자 했는데 setter가 사용이 안 되는 것이었다!! 분명히 Review 엔티티에 setter가 있는데도 사용이 안 되니 굉장히 난감했다. 알고보니... Optional을 사용한 경우에 바로 setter의 사용이 불가능하고 entity.ifPresent(review -> { review.setDeleted(true); }); 이런 식으로 isPresent 메소드 + 람다식을 사용해야 비로소 setter를 사용할 수 있는 것이다~~ ifPresent 메서드는 Optional 객체에 값이 존재하는 경우에만 지정한 동작을 수행할 수 있습니다. 이를 통해 값의 유무를 확..

[개발]🤦🏻‍♀️고민하기 - review 기능에 커스텀 DTO 적용

@PostMapping() public ResponseEntity save(@RequestBody ReviewDTO reviewdto) { School school = schoolService.findBySchoolId(1L) .orElseThrow(() -> new IllegalArgumentException("학교가 존재하지 않습니다.")); Review review = ReviewDTO.toEntity(reviewdto, school); return ResponseEntity.ok().body(reviewService.save(review)); } //해당 학교애 대한 전체 리뷰 보여주기 @GetMapping() public ResponseEntity getReviewsBySchoolId(@Requ..