나는 기본 클래스 A
과 두 개의 서브 클래스 B
및 C
을 가지고있다. 내가 B
의 인스턴스를 가지고 있는데, 타입을 C
으로 업데이트하고 변경하려고합니다. 업데이트 된 데이터가 포함 된 C
의 인스턴스는 일시적입니다. 영구 인스턴스를 수정할 어쨌든 상상할 수 없기 때문입니다.Hibernate joined-subclass update
일시적인 인스턴스가 프런트 엔드에서 서비스 계층으로 전달되면 세션이 시작되고 일부 세션이 올바른 작업인지 확인하기 위해 세션이 시작됩니다. 이 세션 동안 지속적 인스턴스 (B
)가 검색됩니다. 모든 것이 체크 아웃된다고 가정하면, 일시적인 객체는 지속될 것으로 예상됩니다.
올바른 방법으로는 .merge()
이 호출되는 것처럼 보일 수 있지만 .update()
(작동하지 않으며 영구 인스턴스가 현재 세션에 있기 때문에) 호출하지 않은 것처럼 NonUniqueObjectException이 발생합니다. .
이유는 .merge()
이이 상황을 위해 의도 된 것이므로 .merge()
이 NonUniqueObjectException을 제공하는 이유를 알지 못합니다. 일시적인 인스턴스로 세션에있는 엔티티를 업데이트하려고합니다. 내 생각에은 지속적인 인스턴스가 일시적인 인스턴스와 다른 클래스라는 사실에 화가났습니다. 테스트 한 결과 동일한 클래스의 임시 인스턴스에서 .merge()
을 호출하면 모든 것이 예상대로 작동합니다.
다음에 무엇을해야할지 모르겠지만 영구 인스턴스의 .evict()
을 수행하고 .update()
을 시도했지만 StaleObjectException이 발생합니다. 이 시점에서 나는 해결책을 찾을 수 없다. 우리가 바보 같은 짓을하려고하거나 구성 문제가있을 수 있습니까?
그래서 문제는 하위 클래스를 변경하는 것입니까? 나는 그것이 지원되지 않는다는 것을 조금 허락했다. –
예. 어쨌든 Java에서 어떻게 할 수 있습니까? 당신은 할 수 없습니다. – cherouvim