1. this.em = em; 삭제시
: 데이터베이스 변경 사항이 저장되지 않음
문제 코드
public StoreRepository(EntityManager em) {
// this.em = em; (❌ 삭제됨)
}발생하는 오류
- em이 null 상태가 되어, em.createNativeQuery() 호출 시 NullPointerException 발생.
오류 메시지
java.lang.NullPointerException: Cannot invoke "jakarta.persistence.EntityManager.createNativeQuery(String)" because "this.em" is null
at com.metacoding.storev1.store.StoreRepository.save(StoreRepository.java:14)2. query.executeUpdate(); 삭제 시
: 데이터가 저장, 수정, 삭제 되지 않음
문제 코드
public void save(String name, int stock, int price) {
Query query = em.createNativeQuery("insert into store_tb(name, stock, price) values(?,?,?)");
query.setParameter(1, name);
query.setParameter(2, stock);
query.setParameter(3, price);
// query.executeUpdate(); (❌ 삭제됨)
}발생하는 오류
- executeUpdate()가 호출되지 않으면 SQL이 실행되지 않음.
- 즉, INSERT, UPDATE, DELETE 작업이 DB에 반영되지 않음.
오류 메시지
오류 메시지는 없지만, 데이터가 변경되지 않음
3. findAll()에서 Store.class를 지정하지 않으면
문제 코드
public List<Store> findAll() {
Query query = em.createNativeQuery("select * from store_tb order by id desc"); // (❌ Store.class 제거됨)
return query.getResultList();
}발생하는 오류
- createNativeQuery()의 기본 반환 타입은 Object[]이므로, Store 엔티티로 변환되지 않음.
- List<Object[]>를 List<Store>로 캐스팅할 수 없어서 ClassCastException 발생.
오류 메시지
java.lang.ClassCastException: cannot be cast to com.metacoding.storev1.store.Store
at com.metacoding.storev1.store.StoreRepository.findAll(StoreRepository.java:21)4.findByid(int id)에서 getSingleResult()를 호출하면 존재하지 않는 데이터 조회 시
문제 코드
public Store findByid(int id) {
Query query = em.createNativeQuery("select * from store_tb where id = ?", Store.class);
query.setParameter(1, id);
return (Store) query.getSingleResult(); // ❌ 존재하지 않는 데이터 조회 시 예외 발생 가능
}발생하는 오류
- getSingleResult()는 결과가 없으면 NoResultException을 던짐.
오류 메시지
jakarta.persistence.NoResultException: No entity found for query
at com.metacoding.storev1.store.StoreRepository.findByid(StoreRepository.java:28)Share article