2014-09-10 132 views
-2

確實DataNucleus將JPA對MongoDB的JPA原生查詢的MongoDB

例如支持:

entityManager.createNativeQuery("db.Movie.find()"); 
+1

http://www.datanucleus.org/products/accessplatform_3_0/datastore_features.html – 2014-09-10 08:55:53

+0

感謝您的回覆@ KonstantinV.Salikhov。我試過了,但是它返回null並且沒有拋出任何異常。所以我需要知道它是否可以完成。 – 2014-09-10 09:08:00

+0

爲什麼不直接執行「SELECT m FROM Movie m」的JPQL查詢?你認爲在幕後執行什麼?假設你實際上沒有看日誌告訴你 – 2014-09-10 10:21:54

回答

1

它幾乎沒有什麼意義做你正在做的事情。我的意思是你可以訪問底層的MongoDB「DB」對象(即JPA使用的),並使用本地MongoDB API進行操作,而不是期望DataNucleus發明一些基於它的頂層的人工查詢語言(該字符串數據庫.BLAH.find()在MongoDB本地API中不存在,而是你執行db.getCollection(「BLAH」),然後施加約束等,最後調用find()。相反,你可以嘗試(像)這

import org.datanucleus.ExecutionContext; 
import org.datanucleus.store.NucleusConnection; 

ExecutionContext ec = em.unwrap(ExecutionContext.class); 
NucleusConnection conn = ec.getStoreManager().getNucleusConnection(ec); 
DB db = (DB)conn.getNativeConnection(); 

此後你有DB對象使用,使用後你應該調用

conn.close(); 

手回JPA(DataNucleus將)。

+0

感謝@BillFrost +1爲你:) – 2014-09-19 12:45:09