2017-08-09 60 views
0

我有一個使用Hibernate OGM框架和Mongo數據庫的Java應用程序。當我檢索大量數據時,應用程序變得非常緩慢,其中一個瓶頸就是Hibernate。Hibernate OGM - MongoDB:如何以只讀模式檢索數據以提高性能

我在只讀環境中讀取回放數據可以提高性能。我怎樣才能做到這一點?

我有方法嘗試調用這樣的:

entityManager.lock(entity, LockModeType.READ); 

或:

entityManager.createNativeQuery(query, entity) 
.setLockMode(LockModeType.READ) 
.getResultList(); 

,但似乎也有不支持的。

我不能等20分鐘幾兆字節。請幫忙! 每一個建議表示讚賞

在我的情況下,我有一個一對多的關聯樹。查詢位於根目錄,其中提取設置爲LAZY。 然後我在一個線程調用Hibernate.initialize(代理)方法在第二級恢復是EAGER,到更深層次。

+0

也許你可以用更多的細節描述你的用例? – Davide

回答

0

有了可以使用查詢實體管理器提示:

em.createNativeQuery(query) 
    .setHint("org.hibernate.readOnly", true) 
    .getResultList(); 

,或者您可以使用會話:

em.unwrap(OgmSession.class) 
    .createNativeQuery(query) 
    .setReadOnly(true) 
    .list(); 

請注意,如果您可以添加有關的問題的性質更多的細節和如果這是Hibernate OGM中的問題,我們可能會爲它創建一個補丁。

+0

非常感謝。 我已經嘗試了兩種方式,但等待時間仍然很長。 也許我錯了嗎?我在關聯鏈中的最高表上進行了查詢。 –

+0

如果您可以爲我們創建一個測試來運行,我們可以幫助您更多。你的問題是關於啓用只讀模式,所以我認爲答案是正確的。如果你的問題對於stackoverflow來說過於通用,你可以使用hibernate論壇:https://forum.hibernate.org/viewforum.php?f=31 – Davide