마지막으로 Delete 에 대한 내용이다.

Delete a Student
// retrieve the student
int id = 1;
Student theStudent = entityManager.find(Student.class, id);
 
// delete the student
entityManager.remove(theStudent);
Delete based on a condition
int numRowsDeleted = entityManager.createQuery(
	"DELETE FROM Student WHERE lastName='Smith'"
	.executeUpdate();
)

여기서 executeUpdate() 에서의 update 에 대한 의미는 Database 에 대한 modify 를 의미한다고 보면된다. numRowsDeleted 는 삭제된 row 의 개수 값을 저장한다.

Delete All Students
int numRowsDelete = entityManager.createQuery(
	"DELETE FROM Student"
	.executeUpdate();
)

다음은 Development Process 이다.

Step 1: Add new method to DAO Interface
import com.lucvs.cruddemo.entity.Student;
 
public interface StudentDAO {
	...
	Student delete(Integer id);
}
Step 2: Define DAO Implementation
public class StudentDAOImpl implements StudentDAO {
	private EntityManager entityManager;
	...
 
	@Override
	@Transactional
	public Student delete(Integer id) {
		Student theStudent = entityManager.find(Student.class, id);
		entityManager.remove(theStudent);
	}
}
Step 3: Update Main Application
@SpringBootApplication 
public class CruddemoApplication {
	public static void main(String[] args) {
		SpringApplication.run(CruddemoApplication.class, args);	
	}
 
	@Bean
	public CommandLineRunner commandLineRunner(StudentDAO studentDAO) {
		return runner -> {
			deleteStudent(studentDAO);
		}
	}
 
	private void deleteStudent(StudentDAO studentDAO) {
		// delete the student
		int studentId = 5;
		System.out.println("Deleting student id: " + studentId);
		studentDAO.delete(studentId);
	}
}
Delete - Test (delete a student)

우선 test 를 위하여 아래와 같이 몇 개의 object 를 Student table 에 추가하였다.

위의 상태에서 id5 인 object 를 delete 해보자.

성공적으로 id5 인 object 가 delete 된 것을 확인할 수 있다.

Delete - Test (delete all student)

이번에는 모든 object 를 delete 하는 기능을 생성하자.

우선 StudentDAO Interface 에 deleteAll() 을 declare 하고, StudentDAOImpl class 에서 deleteAll() method 를 다음과 같이 define 한다.

@Override  
@Transactional  
public int deleteAll() {  
    return entityManager.createQuery("DELETE FROM Student").executeUpdate();  
}

그리고 Main Application 에서 deleteAllStudents() method 를 다음과 같이 define 한다.

private void deleteAllStudent(StudentDAO studentDAO) {  
    System.out.println("Deleting all students");  
    int numRowsDeleted = studentDAO.deleteAll();  
    System.out.println("Deleted row count: " + numRowsDeleted);  
}

이제 Application 을 실행하여 test 해보자.

결과적으로 DB Table 이 아주 깔끔하게 delete 된 것을 볼 수 있다.