0

我正在使用hibernate OGM与我的MongoDB实例进行通信。我必须得到所有类别为​​的产品清单。我使用的是原生查询方法来实现这一目标如下:NativeQuery更好或HibernateOGM方法

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

我不知道如果是这样做,因为我看到了太多的硬编码(看集合名称)是正确的做法。我可以使用.find()方法来实现相同的目的吗? 我们使用带gradle的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(); 

我假设你有一个属性category实体Product

+0

这是否也适用于mongoDB?这是一个更好的方法,然后使用nativeQuery? –

+1

是的,它将与MongoDB一起使用。我认为这是一个更好的方法,因为它是便携式的。相同的查询将在其他数据存储区以及您要更改后端的时刻起作用。如果您更改了有关映射的某些内容,Hibernate OGM也将能够调整查询。 – Davide