2017-08-09 4 views
0

私は、Hibernate OGMフレームワークとMongoデータベースを使用するJavaアプリケーションを持っています。多くのデータを取得すると、アプリケーションが非常に遅くなり、ボトルネックの1つが休止状態になります。Hibernate OGM - MongoDB:パフォーマンスを向上させるために読み取り専用モードでデータを取得する方法

読み取り専用のコンテキストでは、リトリーブデータがパフォーマンスを大幅に向上させることがあります。どうやってやるの?

entityManager.lock(entity, LockModeType.READ); 

か::私はこの方法で試してくださいました

は次のように呼び出します

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

が、そこがサポートされていないようです。

数メガバイトで20分待つことができません。助けてください! すべての提案に感謝します

私の場合は、1対多の関連付けのツリーがあります。クエリはルート上にあり、フェッチはLAZYに設定されています。 次に、復旧がEAGERの2番目のレベルで、Hibernate.initialize(プロキシ)メソッドをスレッドで呼び出します。クエリを使用することができますエンティティマネージャで

+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

私たちのためにテストを作成することができれば、より多くのお手伝いをすることができます。あなたの質問はreadOnlyモードを有効にすることに関するものだったので、答えは正しいと思います。あなたの質問がstackoverflowにはあまりにも一般的な場合は、ハイバネーションフォーラムを使用することができます:https://forum.hibernate.org/viewforum.php?f=31 – Davide

関連する問題