[TIL] 스프링부트 JPA Update

김대욱·2023년 2월 4일
0

게시글 수정 기능의 서비스 로직이 제대로 작동하지 않는 문제가 생겼다.

    public Post updatePost(Long id, PostDto postDto) {
        Post post = postRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("게시글 없음")
        );
        if(post.getPassword().equals(postDto.getPassword())) { // 비밀번호 일치하는지 확인
            post.update(postDto);
        }else {
            throw new IllegalArgumentException("비밀번호 불일치");
        }

        return post;
    }

post리포지토리의 fingById 메소드를 이용해서 Post객체로 받고, 비밀번호가 일치 할 경우 update()메소드로 post의 필드변수를 변경해주면 DB도 업데이트가 될 줄 알았는데 DB에는 아무런 변화가 없었다.

문제를 해결하기 위해 찾아보니 위 문제는 트랜젝션이 커밋되지 않아서 발생하는 것 같았다.
메소드에 @Transactional 어노테이션을 붙여주니 해결됐다.

@Transactional

어노테이션이 선언된 메서드 내에서 데이터베이스에 대한 연산이 수행될 때, 해당 연산은 트랜잭션으로 묶여 처리된다.

트랜잭션 내에서 여러 개의 데이터베이스 연산이 수행되고, 중간에 예외가 발생하면 모든 연산이 취소되고 롤백된다.

0개의 댓글