在Morphia createQuery方法中传递集合名称是一种好习惯吗?

时间:2019-04-22 11:48:31

标签: java orm morphia

我通常在实例化查询对象时使用这种方法:

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准则?请帮助我理解。

1 个答案:

答案 0 :(得分:0)

该方法用于根据应用程序用途将一个实体存储在不同集合中的情况。它在AdvancedDatastore界面上是“隐藏的”,因此您在Datastore引用上应该看到的就是采用该类型的一个createQuery()。大多数用户不需要覆盖的表格,但它是多年前添加的,以方便那些需要映射到多个位置的人。

这是一个轻度的错误功能,因为它不适用于@Reference字段。我不确定该功能将继续存在多久,因为它会使一些实现复杂化,而带来的收益却很小。