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하면 데이터베이스 갱신이 완료 데이터가 삭제된다. 엔터티의 변경을 알면 제거도 거의 같은 느낌으로 실행할 수 있다.