기본적으로이 구성에 몇 가지 개체가 있습니다 (실제 데이터 모델은 조금 더 복잡합니다).
- A는 B와 다 대다 관계를 가지고 있습니다. (B는
inverse="true"
) - B는 C와 다 대일 관계를 가지고 있습니다. (로
cascade
설정했습니다"save-update"
) - C는 유형 / 카테고리 테이블의 일종입니다.
또한 기본 키는 저장시 데이터베이스에 의해 생성된다는 점을 언급해야합니다.
내 데이터로 A에 다른 B 개체 집합이 있고 이러한 B 개체가 동일한 C 개체를 참조하는 문제가 가끔 발생합니다.
을 호출 session.saveOrUpdate(myAObject)
하면 다음과 같은 최대 절전 모드 오류가 발생 "a different object with the same identifier value was already associated with the session: C"
합니다. 최대 절전 모드가 동일한 세션에서 동일한 객체를 두 번 삽입 / 업데이트 / 삭제할 수 없다는 것을 알고 있지만이 문제를 해결할 수있는 방법이 있습니까? 이것은 드문 상황이 아닌 것 같습니다.
이 문제를 조사하는 동안 사람들이를 사용하는 것을 제안하는 것을 보았습니다 session.merge()
.하지만 그렇게하면 "충돌하는"개체가 모든 값이 null로 설정된 빈 개체로 데이터베이스에 삽입됩니다. 분명히 그것은 우리가 원하는 것이 아닙니다.
[편집] 내가 언급하는 것을 잊은 또 다른 점은 (내가 통제 할 수없는 구조적인 이유로) 각 읽기 또는 쓰기는 별도의 세션에서 수행되어야한다는 것입니다.