2011-07-06 3 views
2

우리의 응용 프로그램에는 이중 지속성이 있습니다. 첫째, 엔티티는 MySQL DB (우리는 Hibernate를 사용하고 있습니다)에 온라인으로 저장 될 수 있고, 두 번째 엔티티는 직렬화를 통해 로컬에 저장 될 수 있습니다.최대 절전 모드 및 직렬화

내가 말하고있어 엔티티는 KnowledgeBase 개체를 포함하는 클래스 User의 목적은 그 KnowledgeBase 엔티티 (List<Card>List<Deck>)의 두 목록이 포함되어 있습니다.

두 지속성은 모두 별개로 작동하지만 데이터베이스에서로드 된 직렬화 된 User 개체를 직렬화 해제하려고 할 때 문제가 발생합니다. 즉, 적어도 한 번 (최대 두 번, 실제로) 최대 절전 모드였습니다.

ArrayList 안에있는 KnowledgeBasePersistentBag으로 바뀌 었습니다. 그게 내 문제의 근원이 될 수 있을까?

또 다른 추측은 게으른 로딩이 이러한 문제를 일으킨다는 것입니다. Hibernate가 어떤 시점에서 객체를 완전히로드하도록 지시하는 방법이 있습니까? (열심히로드하는 것 ...)

답변

4

예, Hibernate.initialize(..)은 개체 및 컬렉션을 초기화합니다. setList(new ArrayList(list))

+1

그것은 개체와 컬렉션을 초기화 사실이지만, 최대 절전 모드 전용 콜렉션 유형을 유지 : 필요한 경우

그런 다음, 당신은 복사 생성자를 사용하여 일반 java.util 사람과 컬렉션을 대체 할 수 있습니다. 우리는 XStream을 사용하여 최대 절전 모드로로드 된 객체를 마샬링/언 마샬링하는 것과 관련된 문제가있었습니다. Hibernate가로드 된 객체를 같은 유형의 일반적으로 인스턴스화 된 객체로 다시로드하는 것보다 더 좋은 방법이 있습니까? – Olaf

+0

@Olaf 예, 잠시 후에 내 업데이트를 확인하십시오. – Bozho

+0

고마워요! 다음 번에는 XStream을 사용하여 Hibernate 로딩 된 엔티티를 XML로 마샬링해야 할 것입니다. – Olaf