Hibernate: 중복된 개체 식별자를 사용한 예외 처리
"Hibernate: 동일한 식별자 값을 가진 다른 개체가 이미 세션"은 Hibernate가 현재 세션과 이미 연관되어 있는 기존 식별자를 가진 객체를 만날 때 발생합니다. 이는 세션에 이미 존재하는 개체를 저장하거나 업데이트하려고 시도할 때 발생할 수 있으며 이로 인해 충돌이 발생합니다.
제공된 코드에서:
<code class="java">public E save(E e) { Session session = null; try { session = sessionFactory.openSession(); log.debug("session="+session.hashCode()+" save "+e); session.saveOrUpdate(e); //here throws exception session.flush(); } catch (Exception e1) { log.err("Cannot open hibernate session "+ e1.getMessage()+" cause : "+e1.getCause()); e1.printStackTrace(); } finally { if ( session != null ) session.close(); session = null;} return e ; }</code>
시도할 때 예외가 발생합니다. 사용자 Bean을 저장하거나 업데이트합니다. 문제의 원인은 사용자 Bean에 역할 목록이 있는 그룹 Bean 목록이 포함되어 있다는 것입니다. User Bean을 저장할 때 Hibernate는 역할을 두 번 저장하려고 시도합니다. 한 번은 그룹 Bean의 일부로, 다시 한 번은 User Bean의 역할 목록의 일부로 저장합니다.
userbean#1 |---|-----------***userbean.groups | | groupbean#1 | | groupbean.roles | | rolebean#1 # save relebean#1 the first time | | ---done rolebean#1 | | ------done all rolebeans of group.roles | | ---done groupbean#1 | |-----------done all groupbeans of userbean.groups |---|-----------***userbean.roles | rolebean#1 # save rolebean#1 the second time, and throws exception here! | ----done rolebean#1 | ..... |-----------done all rolebeans of userbean.roles
이 문제를 해결하려면 다음 접근 방식을 고려하세요. :
위 내용은 중첩된 컬렉션이 있는 사용자 Bean을 저장할 때 Hibernate가 \"동일한 식별자 값을 가진 다른 개체가 이미 세션과 연결되어 있습니다\" 예외를 발생시키는 이유는 무엇이며 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!