0

Я использую hibernate OGM, чтобы поговорить с моим экземпляром MongoDB. Мне пришлось получить список всех продуктов с категорией "abc". Я использую родной подход запросов для достижения этой цели следующим образом:NativeQuery лучше или HibernateOGM методы

String stringQuery = "db.Message.find({'CATEGORY':'" + category + "})"; 
Query query = entityManagerProvider.get().createNativeQuery(stringQuery, Product.class); 
productList = query.getResultList(); 

Я не уверен, что это правильный подход, чтобы сделать это, как я вижу слишком много жесткого кодирования (смотрите на название коллекции). Могу ли я использовать метод .find() для достижения того же? Мы используем сервер vertx с градиентом в качестве инструмента построения.

ответ

1

Вы имеете в виду EntityManager.find()? Вы можете использовать его, если вы фильтруете с использованием первичного ключа. В вашем примере это не похоже.

Что вы можете сделать, это написать запрос JP-QL:

productList = entityManagerProvider.get().createQuery("SELECT p FROM Product p WHERE p.category=:category", Product.class).setParameter("category", category).getResultList(); 

Я предполагаю, что у вас есть объект Product с атрибутом category.

+0

Будет ли это работать с mongoDB? И это лучший подход, а затем использование nativeQuery? –

+1

Да, он будет работать с MongoDB. Я думаю, что это лучший подход, потому что он переносимый. Тот же запрос будет работать и с другими хранилищами данных, как в тот момент, когда вы собираетесь менять бэкэнд. Hibernate OGM также сможет адаптировать запрос, если вы измените некоторые вещи о сопоставлении. – Davide

 Смежные вопросы

  • Нет связанных вопросов^_^