Spring | CRUD 기본 | 엔티티 삭제

남은 것은 엔티티의 삭제이다.

삭제도 기본적으로는 엔티티의 업데이트와 동일하다. ID를 지정하여 엔티티의 인스턴스를 얻어와서, 삭제하고 트랜잭션을 커밋하는 방식을 한다.

아래와 같이 간단한 예제를 작성해 놨다.

package com.devkuma.spring.db;
 
import java.util.List;
 
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 
public class App {
    private static EntityManager manager;
 
    public static void main(String[] args) {
        ApplicationContext app = new
            AnnotationConfigApplicationContext(SampleEntityConfig.class);
 
        EntityManagerFactory factory = app.getBean(EntityManagerFactory.class);
        manager = factory.createEntityManager();
 
        // make dummy
        makeDummyData();
         
        // delete entity
        deleteEntity(1L);
        deleteEntity(3L);
 
        // get list
        Query query = manager.createQuery("from SampleEntity");
        List list = query.getResultList();
        printList(list);
 
        System.out.println("...ok.");
    }
 
    public static void makeDummyData() {  }
    public static void printList(List list) {  }
     
    // delete entity
    public static void deleteEntity(long id) {
        SampleEntity entity = manager.find(SampleEntity.class, id);
        EntityTransaction transaction = manager.getTransaction();
        transaction.begin();
        manager.remove(entity);
        manager.flush();
        transaction.commit();
    }
}

실행하면 ID=1, 3의 요소를 제거하고 남은 2 개를 표시한다. 그럼 이것도 흐름을 정리해 보자.

SampleEntity entity = manager.find (SampleEntity.class, id);

먼저 EntityManager의 “find"를 사용하여 지정된 ID의 엔티티 (여기에서는 SampleEntity)를 얻어온다.

EntityTransaction transaction = manager.getTransaction ();
transaction.begin ();

이어서 EntityTransaction 인스턴스를 얻어와서 트랜잭션 처리를 시작한다.

manager.remove(entity);

엔티티를 삭제한다. 이는 EntityManager의 “remove"메서드를 사용한다. 인수에 데이터베이스에서 검색한 엔티티의 인스턴스를 지정하면, 데이터베이스에서 해당 엔티티를 제거한다.

manager.flush ();
transaction.commit ();

마지막으로 EntityManager를 flush하고 EntityTransaction을 commit하면 데이터베이스 갱신이 완료 데이터가 삭제된다. 엔터티의 변경을 알면 제거도 거의 같은 느낌으로 실행할 수 있다.