hibenate 흔 한 문제 원인 및 해결 방법 (1)
저자: 고비
hibenate 의 조작 데 이 터 를 사용 하 는 과정 에서 update () 와 같이 hibenate a different object with the same identifier value was already associated with the session 이상 이 나타 날 때 가 있 습 니 다.
이 이상 한 설명 에서 이 이상 이 발생 한 원인 이 무엇 인지 대체적으로 알 수 있 습 니 다. 여러 개의 서로 다른 대상 이 같은 identifier (id 와 실체 유형 이 같 고 같은 데이터 베이스 에 기록 되 어야 합 니 다) 를 가지 고 업데이트 등 작업 을 할 때 이상 이 발생 합 니 다.
한 session 에 같은 데이터베이스 기록 (identifier 같은 여러 엔 터 티) 이 여러 개 나 나 왔 다 면, hibenate 는 그 엔 터 티 를 어떻게 판단 하 는 것 이 옳 을 까?따라서 hibenate 가 이 이상 을 던 지 는 것 은 당연 하 다.
문 제 는 이미 명확 하 게 말 했다. 바로 한 session 에서 여러 개의 실체 대상 이 데이터베이스 에 대응 하 는 같은 기록 으로 인해 발생 한 것 이다.
이러한 문제 가 발생 한 이 유 는 우리 가 이전에 특정한 session 을 통 해 특정한 실체 대상 (이 대상 은 hibenate 위탁 관리 가 있 음) 을 얻 었 기 때 문 입 니 다. 그러나 나중에 똑 같은 identifier (id 와 실체 유형 처럼 같은 데이터 베이스 에 기록 되 어야 함) 를 가 진 실 체 를 다시 구성 한 다음 에 이 session 에서 조작 (예 를 들 어 update) 했 기 때 문 입 니 다.새로 구 성 된 실체 가 만 든 것 이다.여기 서 말 하 는 재 구 조 는 코드 를 통 해 수 동 으로 구 조 된 유리 상태 (detached) 실체 일 수도 있 고 hibenate 의 직렬 연결 작업 을 통 해 불 러 온 실체 일 수도 있다.
우 리 는 구체 적 인 실례 를 통 해 설명 한다. (관건 적 인 코드 만 쓴다.)
실례 1. detached 실 체 를 수 동 으로 구성 하 는 경우:
Session sessionA = dao.getSession(); // , sessionA
Persion person1 = (Person) sessionA.load(Person.class,1); // id=1 Person
...
Person person2 = new Person();
person2.setId(1); // detached Person ,id 1
person2.setName("gaofei");
...
sessionA.update(person2); //person2 person1 identifier , person1 ,
...
인 스 턴 스 2. hibenate 급 으로 불 러 오 는 경우: 한 학생 Student 가 한 반 Class 에 만 속 할 수 있다 고 가정 하면 한 교사 Teacher 도 한 반 Class 에 만 속 할 수 있 고 Student 와 Class 급 으로 불 러 와 서 저장 할 수 있 으 며 Teacher 와 Class 급 으로 불 러 와 서 저장 할 수 있 습 니 다.4. 567913. 위의 예 를 통 해 우 리 는 같은 session 에서 같은 identifier 의 실체 가 여러 개 나 나 타 났 고 hibenate 에 이상 이 생 겼 음 을 알 수 있다.문제 의 해결 방법 은 session 의 위탁 관리 실 체 를 사용 하여 hibenate 에서 이 실체의 상 태 를 유지 하 는 것 이다.실례 1 에 대해 다음 과 같이 수정 할 수 있 습 니 다.
4. 567913. 인 스 턴 스 2 에 대해 다음 과 같이 수정 할 수 있 습 니 다.
4. 567913. 정리: 데이터 의 전체 조작 과정 에서 session 에서 이미 위탁 관리 한 실체 대상 을 계속 사용 하면 본 고 에서 언급 한 이상 을 해결 할 수 있다.만약 에 세 션 을 뛰 어 넘 는 조작 이 필요 하고 본 고 에서 언급 한 이상 이 발생 하면 을 참고 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
nginx websocket ip_해시 규칙프로젝트 를 다운로드 한 후 서로 다른 네트워크 에 각각 이 demo 프로젝트 를 배치 합 니 다. 프로젝트 에서 환경 변수 에 따라 시스템 변 수 를 설정 합 니 다. spring.profiles.active=de...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.