Это хорошая практика, чтобы передать имя коллекции в методе createQuery Morphia? - PullRequest
0 голосов
/ 22 апреля 2019

Обычно я использую этот подход при создании экземпляра объекта запроса:

Query<Product> query = datastore.createQuery(Product.class);

Но Morphia позволяет вам также передавать имя коллекции при создании экземпляра объекта запроса, который будет выглядеть следующим образом:

Query<Product> query = datastore.createQuery(COLLECTION_NAME, Product.class);

Я не могу понять, почему мы должны явно передавать имя Коллекции при создании объекта запроса?

Когда мы создаем модель, в этом случае в классе Product мы уже связываем имя коллекции под аннотацией Entity:

@Entity(value = "product", noClassnameStored = true)
class Product {
  // model attributes declared here
}

Одна из причин, по которой я могу придумать, заключается в том, что если одна и та же модель используется в нескольких коллекциях, нам может потребоваться передать имя коллекции, но даже если это так, является ли это хорошей практикой и соответствует ли она рекомендациям ORM? Пожалуйста, помогите мне понять.

1 Ответ

0 голосов
/ 22 апреля 2019

Этот метод используется для случаев, когда один объект хранится в разных коллекциях в зависимости от использования приложения. Он «спрятан» в интерфейсе AdvancedDatastore, так что все, что вы должны увидеть в ссылке Datastore, это тот, который createQuery() принимает тип. Большинству пользователей не понадобится переопределенная форма, но она была добавлена ​​несколько лет назад для удобства тех, кому нужно было сопоставить несколько местоположений.

Это легкая ошибка, так как она не очень хорошо работает с @Reference полями. Я не уверен, как долго эта функция будет продолжать существовать, поскольку она усложняет некоторые из реализаций для очень небольшой выгоды.

...