java - 如何使用 Morphia 查找同一集合中的不同实体

标签 java entity-framework mongodb morphia

我有一个名为 Person 的抽象 POJO 类和两个名为 Developer 和 Manager 的实体。这些实体继承Person抽象类。将它们保存到同一个集合中没有问题,但是当我尝试仅查找集合中的开发人员时,Morphia 的 find 方法会获取集合中的所有记录,并得到 java.lang.ClassCastException。

 Morphia morphia = new Morphia();
 Datastore ds = morphia.createDatastore("test");
 for (Developer savedDeveloper : ds.find(Developer.class).asList()) {
      System.out.println(savedDeveloper.getFoo());
 }

异常

Sep 27, 2013 11:56:18 AM com.google.code.morphia.logging.MorphiaLoggerFactory chooseLoggerFactory
INFO: LoggerImplFactory set to com.google.code.morphia.logging.jdk.JDKLoggerFactory
Developer1
Developer2
Exception in thread "main" java.lang.ClassCastException: test.model.Manager cannot be cast to test.model.Developer
    at test.Test.main(Test.java:39)
Java Result: 1

所以我的问题是,如何在具有多个实体的集合中仅获取一个特定实体列表?

我的 POJO

Person.java

public abstract class Person {

@Id
private ObjectId objectid;
private String username;

public Person() {
}

/* ......Getters and Setters*/ }

People.java

@Entity("people")
public class Developer extends Person {

    private String foo;

    public Developer() {
    }

    public String getFoo() {
        return foo;
    }

    public void setFoo(String foo) {
        this.foo = foo;
    }
}

Manager.java

    @Entity("people")
    public class Manager extends Person {

    private String bar;

    public Developer() {
    }

    public String getBar() {
        return bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }
}

最佳答案

这实际上有一个悬而未决的问题:https://github.com/mongodb/morphia/issues/22

一般情况下,正确执行多态查询实际上会变得相当复杂。事实上,它们让我思考起来有点紧张。也就是说,我正在与 C# 团队交谈,他们有一种似乎对他们有效的方法,而且不会造成太多的胃痛,因此可能有一些灵感可以借鉴。不过,目前您必须按照上面的建议手动包含 className 字段。

关于java - 如何使用 Morphia 查找同一集合中的不同实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19048086/

相关文章:

c# - 在 MongoDB 中计数不正确

c# - 从 Java POV 学习 C#

java - Android camera2 镜头本征校准

java - 如何查找 CSRF token 是否有效

c# - 如何在不引用 EF 的情况下识别 EF POCO 代理?

python - Python 中的有序字典 : add to MongoDB

javascript - 自动生成文档的随机测试数据以播种 MongoDB 数据库

java - 在表单之间导航时如何修复删除字段?

c# - 在 ADO.Net 实体模型中,如何将带有外键的表更新为另一个表?

c# - Ria 服务和导航属性问题