a different object with the same identifier value was already associated with the session

Yunny.Log ·2022년 8월 22일
1

Debugging

목록 보기
39/69
post-thumbnail

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: A different object with the same identifier value was already associated with the session :

원인

< 아래는 틀린 추측입니다.>


        this.coEffect.clear(); 
        // 1) 이렇게 clear() 해주고 

        Set<CoCoEffect> coCoEffectsList =
                ~~~~
                        ).collect(Collectors.toSet());
                        
       // 2) 새로 리스트 만들어주고                 

        this.coEffect.addAll(coCoEffectsList);
      
      // 3) 더해주는데

1) 기존 리스트 clear() 해주고
2) 새로 리스트 만들어주고
3) 더해주는데
,

https://stackoverflow.com/questions/2144697/spring-hibernate-a-different-object-with-the-same-identifier-value-was-alrea

clear() 하면서 아예 배열이 날아가버리지
그래서 new ArrayList();
를 새로 할당해주고 addAll() 이렇게 해줬어야 하는 것


        this.coEffect.clear(); 
        // 1) 이렇게 clear() 해주고 
		
        this.coEffect = new HashSet(); // list 라면 new ArrayList(); // 이 부분 추가! 
        
        Set<CoCoEffect> coCoEffectsList =
                ~~~~
                        ).collect(Collectors.toSet());
                        
       // 2) 새로 리스트 만들어주고                 

        this.coEffect.addAll(coCoEffectsList);
      
      // 3) 더해주는데

흠 그래도 제대로 해결이 안된다

javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session :

아마 clear() 시킨 아이가 여전히 세션에 남아있어서 그런 것 같움

위의 추측은 전혀 틀린 거였고, 다음 디버깅 문제를 일으키는 원인이 되고 말았습니다.

08-23 다시 도전

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: A different object with the same identifier value was already associated with the session : [eci.server.CRCOModule.entity.CoNewItem#eci.server.CRCOModule.entity.CoNewItemId@cef3d1e3]; nested exception is javax.persistence.EntityExistsException: A different object with the same identifier value was already associated with the session : [eci.server.CRCOModule.entity.CoNewItem#eci.server.CRCOModule.entity.CoNewItemId@cef3d1e3]] with root cause

같은 아이디가 존재할 때 일어나는 에러!

  • 따라서 기존에 아이디가 동일한 게 있으면 기존 아이템을 add 해주고
  • 기존에 아이디가 없는 아이템일 경우에만 새로 생성해주도록 변경하니 해결!

0개의 댓글