Morphia:如果一个是另一个的子集,那么两个对象可以从同一个集合中拉出来吗?

时间:2014-10-14 15:52:21

标签: java mongodb morphia

让我们说我有两个非常基本的类,它们共享我想要存储在mongo中的大部分信息。像这样:

public class Customer{

    @id
    private int customerID;
    private String Name;
    private int social;
    private long balance;
}


public class CustomerInfo{

    @id
    private int customerID;
    private String Name;
    private int social;
    private long balance;
    private Address address;
    private PhoneNumber phoneNumber;
}

如果我不希望在应该做的时候有两个几乎相同的集合。我是否可以为CustomerInfo创建单个集合,并且仍然使用其中包含的记录填充Customer类,因为它们是CustomerInfo的子集?

我知道我只能加载customerInfo只有我关心的值,但我想要更优雅的东西,并且更好地插入我现有的格式。

1 个答案:

答案 0 :(得分:1)

@Entity(value="customers", noClassnameStored=false)
public class Customer {

    @Id
    private ObjectId id;
    private String Name;
    private int social;
    private long balance;
}


public class CustomerInfo extends Customer {
    private Address address;
    private PhoneNumber phoneNumber;
}

应该那样工作。由于您将类名存储在每个文档中,因此您可以轻松查询要使用的类名;即使Morphia会根据属性自行解决这个问题。

PS:除非你知道自己做了什么以及为什么这样做,否则请将你的ID保存为ObjectId。 PPS:您可能希望使用对象数据类型而不是原语,以防它们为空 - 在这种情况下,它们不会被存储并占用数据库中的空间。