동일한 식별자 값을 가진 다른 객체가 이미 세션에 연관되어 있었습니다: 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를 기반으로 사용자 정보를 받아 이 객체에 할당하는 것은 불가능합니다. 그래서 같은 식별자 값을 가진 다른 객체가 세션 오류와 이미 연관되어 있을 수 없습니다!!
|