9.4. 책 서비스 클래스에 수정 기능 메소드 추가하기

책 정보를 수정하는 기능은 "책 정보를 읽어서 매개변수로 채운 후 저장"하는 과정입니다. 간단하게 구현해 보겠습니다.

src/main/java > com.yse.dev.book.service > BookService.java

public void update(BookEditDTO bookEditDTO) throws NoSuchElementException {  
    Book book = this.bookRepository.findById(bookEditDTO.getBookId()).orElseThrow();  
    book = bookEditDTO.fill(book);        
    this.bookRepository.save(book);  
}  

데이터를 데이터베이스에 저장할 때 실행된 SQL 쿼리는 다음과 같습니다.

Hibernate:   
    update  
        book   
    set  
        insert_date_time=?,  
        price=?,  
        title=?   
    where  
        book_id=?  
Hibernate:   
    select  
        book0_.book_id as book_id1_0_0_,  
        book0_.insert_date_time as insert_d2_0_0_,  
        book0_.price as price3_0_0_,  
        book0_.title as title4_0_0_   
    from  
        book book0_   
    where  
        book0_.book_id=?  

첫번째 쿼리는 update 쿼리입니다. update {테이블명} set 컬럼1=값1, 컬럼2=값2 where 조건 형식으로 사용합니다.
즉 실제로 데이터를 수정할 때 사용하게 됩니다.

update  
    book   
set  
    insert_date_time=?,  
    price=?,  
    title=?   
where  
    book_id=?  

위 코드는 book 테이블의 데이터 중 book_id 로 특정 행을 지정하고 insert_date_time, price, title 컬럼을 갱신하겠다는 의미가 됩니다.


두번째 쿼리는 select 쿼리입니다.
select 쿼리가 실행되는 건, 데이터베이스에서 자동으로 갱신되는 열(예를 들어 insert_date_time) 의 데이터도 JPA에서는 알아내야 하기 때문에 update 이후 데이터베이스와 동기화를 위해서입니다.