2012-12-24 14 views
1

투명 활성화/지속성이있는 db4o 8.0을 사용하고 있습니다 ... EnumSet (및 다른 것들)을 포함하는 클래스가 있습니다. 인스턴스화하고 enum 값을 집합과 저장소에 추가합니다. 제가 DB에서 검색 할 때, 그것을 얻을 내가이 예외 얻을 개체를 활성화하는 : 내가 사용하는db4o enumset 예외

Exception in thread "main" java.lang.ClassCastException: class Resources.Enums$fooEnum_t != null 
    at java.util.EnumSet.typeCheck(EnumSet.java:380) 
    at java.util.RegularEnumSet.add(RegularEnumSet.java:160) 
    at java.util.RegularEnumSet.add(RegularEnumSet.java:36) 
    at com.db4o.typehandlers.CollectionTypeHandler.addToCollection(CollectionTypeHandler.java:120) 
    at com.db4o.typehandlers.CollectionTypeHandler.activate(CollectionTypeHandler.java:45) 
    at com.db4o.internal.Handlers4.activate(Handlers4.java:300) 
... 
... 

이 db4o는에 각각 EnumSet을 저장하려면를 :

config.common().objectClass(EnumSet.class).translate(new com.db4o.config.TSerializable()); 

내가 어떤 문제를 알아낼 수 없습니다 입니다. 어떤 아이디어?

편집 :
나는 db4o는에 대한 질문을 할 위치를 알 수 없습니다. SO 커뮤니티는 db4o에 대해 매우 적극적이지 않습니다. 이것은 db4o가별로 인기가 없거나 "지원"을위한 다른 장소가 있기 때문입니까?

편집 2 : http://community.versant.com/Forums/tabid/98/aft/1046/Default.aspx#3370

내가 한 가지 더 인식 :
나는 관련이있을 수 있지만, 도움이되지 않습니다 VERSANT의 포럼에 게시물 것으로 나타났습니다. java.util.EnumMap 및 java.util.EnumSet에 대한 지원 기능은 기본적으로 제공되지 않으므로 db4o는 예외를 throw합니다. 기본 생성자가 없으며 null args를 가진 모든 생성자가 이러한 클래스에 대해 실패하기 때문입니다. Db4o.configure(). objectClass ("java.util.EnumMap"). translate (new com.db4o.config.TSerializable())는 물론 문제를 해결합니다. 표준 컬렉션 프레임 워크가 지원되어야한다고 생각합니다.

답변

1

db4o에서 enum을 사용할 때조차주의해야합니다. db4o가 열거 형을 저장하는 방식은 매우 위험합니다. 당신이 리팩터링하는 경우 열거 형을 변경하면 db4o에 열거 형을 저장할 때 매우 이상한 동작, 버그가 발생할 수 있습니다. 지금까지 열거 형에 대한 스위치 문이 잘못된 위치로 이동할 수 있습니다.

짧은 이유 : db4o는 개체 인스턴스와 같은 열거 형을 저장하고로드 할 때 반사 당 열거 형 값을 설정합니다. 열거 형을 변경하면 안되기 때문에 매우 이상한 버그가 발생할 수 있습니다.

나는 (Java) -enum을 저장하지 않으므로 enum-set도 저장하지 않을 것이다.

+0

응답 해 주셔서 감사합니다. 여기 상황이있는 것 같아요. 프로젝트에 enum이 꽉 차있어서이를 변경하거나 enum이없는 것을 처리하는 것은 매우 어렵습니다. 여기에서 해킹을 찾아야합니다. 어떻게 든 번역사를 사용하고 열거 형을 문자열로 저장할 수 있습니까? – ApollonDigital

+0

튜토리얼 및 db4o에 대한 검색에 충분한 시간을 투자 한 후에 많은 버그와 나쁜 디자인이 있다는 느낌이 들었습니다. 임 프로젝트가 얼마나 활발한 지 모르겠습니다. 때로는 더 나은 것을 찾기 시작해야한다고 생각하지만 좋은 대안이 있는지 모르겠습니다. Sql 솔루션은 낮은 수준이며 매우 엄격하게 정의되어 있으며 oodbs는 널리 사용되지 않으며 잘 개발되지 않았습니다. 데이터베이스가 너무 엉망입니다 : p – ApollonDigital

+0

db4o로 솔루션을 찾았습니까? 왜냐하면 나는 똑같은 문제가 있기 때문이다. – rob