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());
}
@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());
}
발생한 오류
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());
}
오류 발생 이유
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());
}
오류를 해결하면서 참고한 자료
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)
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)