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