java 86

[개발]🚨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 - 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..

[개발]🎁배운점 - @JsonIgnore

@JsonIgnore에 대해서 단순히 블로그 글이 아니라 내가 직접 몸소 필요성을 느끼고 그에 대한 해결책으로 이 어노테이션을 알게되어서 너무나 기쁘고 신기했다😂 🛤️현상 review 엔티티에 필요한 schoolId라는 속성이 school 테이블에 조인되어 있기 때문에 위와같이 id 값이 1번에 해당하는 불필요한 학교의 정보가 다 딸려나오게 되었다. school 테이블의 필드가 워낙 많다보니 생각보다 불편함을 느낄만한 상황이었다. 🗝️해결

[개발]🤦🏻‍♀️고민하기 - Review_논리적 삭제(logical delete) 도입

완전한 삭제가 아니라 반 삭제처럼 데이터를 일시적으로 비활성화하는 것을 "소프트 삭제(soft delete)" 또는 "논리적 삭제(logical delete)"라고 합니다. 소프트 삭제는 데이터를 데이터베이스에서 완전히 삭제하지 않고, 대신 삭제된 표시를 나타내는 특정 칼럼(예: "isDeleted")의 값을 변경하여 해당 데이터를 비활성화시킵니다. 이렇게 삭제된 표시를 가진 데이터는 일반적으로 조회 및 수정 작업에서 필터링되어 처리됩니다. 소프트 삭제는 데이터 복구 가능성이 있고, 삭제된 데이터의 이력을 추적할 수 있는 장점이 있습니다. 또한, 완전한 삭제보다 더 안전한 방법으로 데이터를 관리할 수 있습니다. 스프링 웹 프로젝트에서 소프트 삭제를 구현하기 위해서는 데이터베이스 스키마에 삭제 여부를 나타..

1. 스터디 시작

지난주 월요일에 스터디 시작했으나 블로그 글을 적는 것을 깜박 잊어서 지금에서라도 작성해보록 하겠슴다... 지난주 주제는 JWT었다. 진행방식 1주일 전에 스터디의 주제를 정한다. ex) jwt, was, java 심화문법 등등 각자 주제에 대해 공부하고 서로 발표할 내용에 대해 ppt를 '간단히' 제작한다. 왜냐하면 공식적인 발표가 아니라 서로 공부한 것을 공유하는 차원이고, 더 중요한 것은 서로 대화로 주고/받는 것이 때문에!!! 만남에서 서로 ppt를 공유하며 각자 발표한다. 발표를 진행하며 모르는 것들은 질문하고, 새로 알게된 것들은 메모한다. 모르는 사항은 상대방이 답변해주거나 다음 모임까지 알아오도록 한다.

스터디 2023.06.12

[개발]🚨ERROR - 객체vs기본 자료형의 불일치

🛤️현상 public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; //이 오브젝트의 아이디 private String title; private String content; private Long category; @ManyToOne @JoinColumn(name = "userId") @JsonIgnore private User user; . . . } 이런 식으로 Board entity가 있는데 여기서 주목해야 할 부분은 user 필드이다. 이 필드의 자료형은 User라는 entity 클래스이다. 자료형을 객체로 지정하면 JPA가 알아서 그 객체의 pk를 가지고 온다고 한다. 그래서 user ..