4. Spring DATA JPA 데이터 수정 및 삭제

데이터 수정 테스트 코드

package com.kyhslam;

import java.util.Optional;
import java.util.stream.Stream;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.kyhslam.domain.Board;
import com.kyhslam.persistence.BoardRepository;

@RunWith(SpringRunner.class)
@SpringBootTest
public class BoardRepositoryTests {

    @Autowired
    private BoardRepository boardRepo;

    @Test
    public void testUpdate() {

        System.out.println("Read First -----------");
        Board board = boardRepo.findById(1L).get();

        System.out.println("Update Title =----------");
        board.setTitle("update 1 title");

        System.out.println("Call Save() ----------- ");
        boardRepo.save(board);
    }
}

로그분석

Call Save() ----------- 
Hibernate: select board0_.bno as bno1_0_0_, board0_.content as content2_0_0_, board0_.regdate as regdate3_0_0_, board0_.title as title4_0_0_, board0_.updatedate as updatedate5_0_0_, board0_.writer as writer6_0_0_ from tbl_boards board0_ where board0_.bno=?
Hibernate: update tbl_boards set content=?, regdate=?, title=?, updatedate=?, writer=? where bno=?
  • save() 하는 로그를 보면 select문과 update가 실행되는 것을 볼 수 있다.

  • 이처럼 JPA는 데이터베이스에 바로 작업을 하는 JDBC와는 달리 스스로 엔티티 객체들을 메모리 상에서 관리하고, 필요한 경우에 데이터베이스에 작업을 하게 된다.

  • 즉, 수정과 삭제 작업은 직접 데이터베이스에 바로 SQL문을 실행하는게 아니고 엔티티 객체가 우선적으로 메모리상에 존재하고 있어야 한다. 이 과정을 위해서 SELECT가 동작하게 되는 것이다.

  • 참고로 여기서 다시 수정할 경우 조회한 엔티티와 수정된 엔티티가 동일한 값들을 가지고 있어서 수정할 필요가 없기 때문에 UPDATE문을 실행하지 않는다.

데이터 삭제

    @Test
    public void testDelete() {
        System.out.println("DELETE Entity ====== ");
        boardRepo.deleteById(1L);
    }

로그확인

DELETE Entity ====== 
Hibernate: select board0_.bno as bno1_0_0_, board0_.content as content2_0_0_, 
board0_.regdate as regdate3_0_0_, board0_.title as title4_0_0_, board0_.updatedate as 
updatedate5_0_0_, board0_.writer as writer6_0_0_ from tbl_boards board0_ where board0_.bno=?

Hibernate: delete from tbl_boards where bno=?

댓글

Designed by JB FACTORY