Morphia:遗产处理得不好?

时间:2014-11-25 10:31:42

标签: mongodb inheritance morphia

我有一个实现接口的类。为什么arraylist内容没有存储在数据库中?以下是一些用于说明问题的代码。

班级

@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;
}
}

界面

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());
    }
}

DB中的结果

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

1 个答案:

答案 0 :(得分:0)

接口只能声明方法签名和常量(static final变量)。您想要使用的是一个从中继承的抽象基类。

您的代码中的其他观察结果:

  • id应为ObjectId类型,并自动编入索引,您不需要@Indexed
  • 属性应为privateprotected,您需要为其提供getter和setter
  • 您的实体类
  • 中需要默认的无参数构造函数