이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 21246|회답: 0

[출처] 동일한 식별자 값을 가진 다른 객체가 이미 ...

[링크 복사]
게시됨 2016. 7. 1. 오전 10:48:52 | | | |
동일한 식별자 값을 가진 다른 객체가 이미 세션에 연관되어 있었습니다: 398fdbba-57b8-4d3d-b84b-4c0c0b497f02, 엔티티: XXX



이 오류를 총 두 번 겪었고, 좋은 해결책을 찾지 못했으며, 이 오류가 발생했습니다

이유는 아마도 잘 알려져 있을 텐데, 하이버네이트에서는 같은 세션에 동일한 로고가 두 개 있기 때문입니다

하지만 다른 엔티티라면 saveOrUpdate(object) 작업을 실행할 때 이 오류가 보고됩니다.

헤헤, 아마 네가 말하는 것과 안 하는 것 사이에 차이가 없다고 말할지도 몰라, 인정해, 헤헤, 구체적인 건 몰라

왜 이 오류가 발생했는지 말씀드리세요. 그렇지 않았다면 오랫동안 해결되지 않았을 텐데, 일시적인 오류로 설명해 주세요

해결책은 저처럼 근본 원인을 찾을 방법이 없는 사람들에게 계속 실행할 수 있는 방법을 제공하는 것입니다

(물론 맞지만, 원인부터 시작하지 않습니다)
    사실 이 문제는 매우 간단합니다. session.clean() 연산을 수행하면 됩니다

하지만 클린 작업 후에 saveOrUpdate(object) 작업을 수행했는데, 이는 가능합니다

"같은 컬렉션의 두 가지 표현을 찾았다"고 해서 많은 정보를 찾아봤습니다.

좋은 설명은 없으며, 이 글이 가장 큰 도움이 됩니다

http://opensource.atlassian.com/projects/hibernate/browse/HHH-509。

마지막으로, session.refresh(object) 메서드로 해결할 수 있으나, 객체가 그렇지 않을 때는 참고하세요

데이터베이스에 데이터가 있는 객체라면 session.refresh(object) 팩터를 사용할 수 없습니다

새로고침은 세션에 객체가 없을 때 최대 절전 세션에서 객체를 다시 가져오는 것입니다

이 객체가 있으면 오류가 보고되므로 saveOrUpdate(object) 사용하기 전에 판단해야 합니다.

부숴

    물론, 이 문제에 대한 가장 쉬운 해결책은 Hibernate에 포함된 merge()를 사용하는 것입니다.

방법. 하지만 문제가 생기면 항상 이 소프트웨어에 포함된 매우 유용한 방법을 사용한다고 느낍니다

(saveOrUpdate(), save(), update())에 비해 매우 불쾌하게 느껴집니다.
    나중에 알게 된 점은, 이 오류가 일대다 매핑과 다대다 매핑에서 자주 나타난다는 것을 알게 되었습니다. 여기 계세요

1대다 및 다대다 매핑을 사용할 때는 주의해야 합니다
최대 절전 상태 문제 해결 및 처리
1. 동일한 식별자 값을 가진 다른 객체가 이미 세션에 연결되어 있었다.
오류 이유: 최대 절전 모드에서는 같은 세션 내에 동일한 두 정체성이 있지만 서로 다른 엔터티가 존재합니다.
작업 방어 1: session.clean()
추신: 클린 작업 후 saveOrUpdate(object) 같은 데이터 상태 변경 작업을 수행하면 "같은 컬렉션의 두 표현을 찾았습니다" 예외가 발생할 수 있습니다.
해결책 2: session.refresh(object)
추신: 객체가 데이터베이스에 데이터가 있는 객체가 아니라면, session.refresh(object)를 사용할 수 없습니다. 왜냐하면 메서드가 최대 절전 세션에서 객체를 다시 가져오기 때문입니다. 세션에 객체가 없으면 오류가 보고되므로 saveOrUpdate(object)를 사용하기 전에 판단해야 합니다.
해결책 3: session.merge(object)
추신: Hibernate의 방식을 추천합니다.
2, 같은 컬렉션의 두 표현을 발견했다
오류 원인: 1번 참조.
우회 방법: session.merge(object)
위의 두 이상 현상은 1대다 매핑과 다대다 매핑에서 자주 나타납니다




오류 원인:

오해:새로운 사용자 객체를 만들고 사용자 ID를 기반으로 사용자 정보를 받아 이 객체에 할당하는 것은 불가능합니다. 그래서 같은 식별자 값을 가진 다른 객체가 세션 오류와 이미 연관되어 있을 수 없습니다!!





이전의:C# 4.0에서의 다이내믹 사용
다음:C# 객체의 얕은 복제 복제
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com