1. @Transactional 삭제시
: 데이터베이스 변경 사항이 저장되지 않음
문제 코드
public void 상품등록(String name, int stock, int price) { // ❌ @Transactional 없음
storeRepository.save(name, stock, price);
}발생하는 오류
- @Transactional이 없으면 트랜잭션이 자동으로 롤백될 수 있음.
- 예를 들어, 상품삭제(id) 실행 중 예외 발생 시, 삭제 작업이 부분적으로만 적용될 가능성 있음.
오류 메시지
org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query
2. storeRepository.save(name, stock, price); 삭제 시
: 상품이 등록되지 않음
문제 코드
@Transactional
public void 상품등록(String name, int stock, int price) {
// storeRepository.save(name, stock, price); (❌ 삭제됨)
}발생하는 오류
- 상품등록()을 호출해도 실제로 데이터가 DB에 저장되지 않음.
오류 메시지
오류 메시지는 없지만, DB에 데이터가 저장되지 않는 문제 발생
3. storeRepository.findAll(); 삭제 시
: 상품 목록을 가져올 수 없음
문제 코드
@Transactional
public void 상품등록(String name, int stock, int price) {
// storeRepository.save(name, stock, price); (❌ 삭제됨)
}발생하는 오류
- 상품 목록 API를 호출하면 항상 null이 반환됨.
- 클라이언트가 빈 화면을 보거나, NullPointerException 발생 가능성 있음.
오류 메시지
java.lang.NullPointerException: Cannot invoke "java.util.List.size()" because "storeList" is null
at com.metacoding.storev1.store.StoreController.list(StoreController.java:12)4. if (store == null) throw new RuntimeException("상품없어"); 삭제 시
: 존재하지 않는 상품 삭제 시 오류 없음
문제 코드
public void 상품삭제(int id) {
Store store = storeRepository.findByid(id);
// if (store == null) throw new RuntimeException("상품없어"); (❌ 삭제됨)
storeRepository.deleteById(id);
}발생하는 오류
- 존재하지 않는 상품을 삭제하려고 할 때 오류 없이 진행됨.
- 그러나 DB에서 null을 삭제하려 하면 DataIntegrityViolationException이 발생할 수도 있음.
오류 메시지
org.springframework.dao.DataIntegrityViolationException: could not execute statement
Share article