我通常在实例化查询对象时使用这种方法:
Query<Product> query = datastore.createQuery(Product.class);
但是Morphia允许您在实例化查询对象时也传递集合名称,如下所示:
Query<Product> query = datastore.createQuery(COLLECTION_NAME, Product.class);
我无法理解为什么在创建查询对象时我们必须显式地传递Collection名称?
创建模型时,在这种情况下,在Product类中,我们已经在Entity
批注下绑定了集合名称:
@Entity(value = "product", noClassnameStored = true)
class Product {
// model attributes declared here
}
我能想到的一个原因是,如果在多个集合中使用相同的模型,那么我们可能需要传递集合名称,但是即使是这样,这也是一种好的做法,它是否遵守ORM准则?请帮助我理解。
答案 0 :(得分:0)
该方法用于根据应用程序用途将一个实体存储在不同集合中的情况。它在AdvancedDatastore
界面上是“隐藏的”,因此您在Datastore
引用上应该看到的就是采用该类型的一个createQuery()
。大多数用户不需要覆盖的表格,但它是多年前添加的,以方便那些需要映射到多个位置的人。
这是一个轻度的错误功能,因为它不适用于@Reference
字段。我不确定该功能将继续存在多久,因为它会使一些实现复杂化,而带来的收益却很小。