2022-07-30 개발일지

컴클로딩·2022년 7월 30일
0
post-thumbnail

📂 Error List

1. TransactionRequiredException 해결

  • 발생한 오류
    • TransactionRequiredException
  • 오류가 발생한 코드
    public void deleteWish(User user, Long roomId) {
        Room room = roomRepository.findById(roomId).orElseThrow(
                () -> new IllegalArgumentException("해당 숙소 정보를 찾을 수 없습니다.")
        );

        Wish wish = wishRepository.findByUserAndRoom(user, room)
                .orElseThrow(() -> new IllegalArgumentException("찾을 수 없는 wish 항목입니다."));

        wishRepository.deleteById(wish.getId());
    }
  • 오류 발생 이유
    • Service단에 deleteById()를 사용할 때 @Transactional을 걸어주지 않았다.
  • 해결책
    • 해당 메서드 위에 @Transactional 추가해준다.
  • 오류 해결 후 코드
	@Transactional
    public void deleteWish(User user, Long roomId) {
        Room room = roomRepository.findById(roomId).orElseThrow(
                () -> new IllegalArgumentException("해당 숙소 정보를 찾을 수 없습니다.")
        );

        Wish wish = wishRepository.findByUserAndRoom(user, room)
                .orElseThrow(() -> new IllegalArgumentException("찾을 수 없는 wish 항목입니다."));

        wishRepository.deleteById(wish.getId());
    }

2. java.lang.ClassCastException 해결

  • 발생한 오류

    • java.lang.ClassCastException
  • 오류가 발생한 코드

    WishController.java

    public interface WishRepository extends JpaRepository<Wish, Long> {
        Optional<Long> findByUserAndRoom(User user, Room room);
    }

    WishService.java

        @Transactional
        public void deleteWish(User user, Long roomId) {
            ...생략
    
            Long wishId = wishRepository.findByUserAndRoom(user, room)
                    .orElseThrow(() -> new IllegalArgumentException("찾을 수 없는 wish 항목입니다."));
    
            wishRepository.deleteById(wish.getId());
        }
  • 오류 발생 이유

    • findByUserAndRoom을 하면 사실상 Wish 객체가 반환되는데 wish의 id값이 반환된다고 생각하고 Optional<Long>을 사용했다. 그래서 Service단에서 에러를 던져주다가 반환타입이 맞지 않아서 ClassCastException 오류가 발생했다.
  • 해결책

    • Optional<Long>에서 Optional<Wish>로 코드 변경 후 서비스단에서는 wish.getId()로 wish의 id값을 반환받아서 사용했다.
  • 오류 해결 후 코드

    WishController.java

    public interface WishRepository extends JpaRepository<Wish, Long> {
        Optional<Wish> findByUserAndRoom(User user, Room room);
    }

    WishService.java

        @Transactional
        public void deleteWish(User user, Long roomId) {
            ...생략
    
            Wish wish = wishRepository.findByUserAndRoom(user, room)
                    .orElseThrow(() -> new IllegalArgumentException("찾을 수 없는 wish 항목입니다."));
    
            wishRepository.deleteById(wish.getId());
        }
  • 오류를 해결하면서 참고한 자료

3. H2 console에서 Column not Found

  • 저번에도 이것때문에 많이 헤맸는데 또 헤맸다...
  • 발생한 오류
    • Column not Found
  • 오류가 발생한 코드
INSERT INTO ROOM (CREATED_AT,CATEGORY, INFORMATION, LOCATION, MAX_GUEST, PRICE, TITLE, USER_ID) VALUES ("2022-07-30","test 카테고리", "test 소개글", "test 위치", 6, 70000, "test 숙소", 1)
  • 오류 발생 이유
    • VALUES ()안에 쌍따옴표(")를 사용했기 때문
  • 해결책
    • 쌍따옴표(")를 그냥 따옴표(')로 변경
  • 오류 해결 후 코드
INSERT INTO ROOM (CREATED_AT,CATEGORY, INFORMATION, LOCATION, MAX_GUEST, PRICE, TITLE, USER_ID) VALUES ('2022-07-30','test 카테고리', 'test 소개글', 'test 위치', 6, 70000, 'test 숙소', 1)
profile
어떠한 가치를 창출할 수 있을까를 고민하는 개발자. 주로 Spring으로 개발해요. https://comclothing.tistory.com/ 👈🏻티스토리 블로그로 이전 완료

0개의 댓글