2014-11-25 3 views
0

인터페이스를 구현하는 클래스가 있습니다. arraylist 내용이 데이터베이스에 저장되지 않은 이유는 무엇입니까? 다음은 문제를 설명하는 코드입니다.Morphia : 상속이 제대로 처리되지 않습니까?

클래스

@Entity 
public class MyClass implements MyInterface { 

@Id 
@Indexed 
public String id; 

public String someField; 

public MyClass(String id, String someField){ 
    this.id = id; 
    this.someField = someField; 
} 
} 

인터페이스 DB에

public interface MyInterface { 

@Embedded 
public List<String> mylist = new ArrayList<String>(); 
} 

테스트 코드

@Test 
public void test() { 
    testInheritance(); 
} 

public void testInheritance() { 
    MyClass myClass = new MyClass("test", "someField"); 
    myClass.myList.add("wow"); 
    MyClassDao dao = new MyClassDao(); 
    dao.save(myClass); 
} 

public class MyClassDao extends BasicDAO<MyClass, ObjectId> { 

    public MyClassDao() { 
     super(MyClass.class, MorphiaManager.getMongoClient(), MorphiaManager.getMorphia(), MorphiaManager.getDB().getName()); 
    } 
} 

결과

{ 
"_id" : "test", 
"className" : "gr.iti.mklab.simmo.util.MyClass", 
"someField" : "someField" 
} 

답변

0

인터페이스는 메소드 서명 및 상수 (static final 변수) 만 선언 할 수 있습니다. 당신이 사용하고자하는 것은 상속받은 추상 기본 클래스입니다. 코드에서

추가 관찰하십시오 id이 유형 ObjectId을 OB해야하며, 자동으로 인덱싱

  • , 당신은 @Indexed
  • 속성이 private 또는 protected해야 필요가 없습니다 당신은 제공해야 getter 및 setter
  • 엔티티 클래스에 기본 no-arg 생성자가 필요합니다.