나는 단순한 객체를 가지고 있으며, 이것은 단지 최대 절전 모드로 매핑된다.Java/Hibernate를 이용한 아카이빙
class SimpleObject {
private int id;
private String textA;
private String textB;
private Date date;
private Status status;
//+getters/setters/other stuff
}
이제 내 테이블은 gettig가 매우 거대하기 때문에 (몇 수백만 항목), 나는 정말로 필요 (사용자는 나중에 필요할 수도 있습니다. 실제로 두 테이블을 검색 할 수있는 옵션을 선택하면됩니다.하지만 아직 해결되지 않았으며 다른 곳에서 수행 될 것입니다).
그래서 매핑 파일을 가능한 한 간단하게 유지하고 객체 (아카이브/비 아카이브)를 변환하고 간단한 유산을 사용하기로 결정했습니다.
abstract class AbstractSimpleObject {
// idem SimpleObject
}
class SimpleObject extends AbstractSimpleObject {
}
class SimpleObjectArchived extends AbstractSimpleObject {
}
union-subclass를 사용했습니다. 내 최대 절전 모드 매핑 및 SimpleObject를 이전 테이블에 매핑하고 SimpleObjectArchived를 동일한 테이블에 매핑합니다.
이제 모든 것이 정상입니다. 삭제/생성/업데이트 할 수 있습니다. 지금
내 SimpleObjectBusinessRules 클래스에서 나는 메소드 아카이브를 정의한다 :
모든 try/catch /를 생략했다.saoDao.saveAll(...)
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:[...]
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:[...]
에서 최대 절전 모드 예외가 발생한다.
누구든지이 문제를 해결하는 방법을 아는 사람? 아니면 누가 이미 최대 절전 모드로 보관 처리하고 더 나은 솔루션 (또는 심지어 최대 절전 모드로 보관하는 작업 솔루션)을 가지고 있습니까?
아카이브에서 삭제하고 삽입하는 사이에 내 개체가 손실되지 않습니다 (어딘가에/어딘가에 문제가있는 경우) ** 어떻게 ** 할 수 있습니까? 그래서 한 세션에서 모든 작업을 수행해야한다고 생각한 이유는 ... – jacob
두 개 이상의 세션에 대해 트랜잭션을 확장 할 수 있습니다. 키워드는 DTC, 분산 트랜잭션입니다. 당신은 Hibernate를 위해 그것들을 가능하게 할 수 있고 두 세션 모두 트랜잭션을 공유 할 것이다. – Falcon
한번 시도해 보겠습니다. 고마워, 지금이야. – jacob